Size: a a a

2020 November 27

СП

Сергей Пятыгин... in Delphi & Lazarus
Viktor Akselrod
вопрос риторический.
более правильно с точки зрения ООП, контролем за доступом в данным класса, учитывая возможную доработку классов в дальнейшем и тд использовать именно свойства.
но если прям вообще ничего такого не планируется, то и с полями будет норм работать
хотя я тоже сам не стал бы заменять свойства на поля при условии, что это публичный класс
Спасибо, те если клавиатура терпит насилие, то лучше так как сделал, со свойствами?
источник

VA

Viktor Akselrod in Delphi & Lazarus
Сергей Пятыгин
Спасибо, но интересует не простое решение, а как это вообще эту идеологию=архитектуру сделать правильно?
в принципе, если эти классы просто набор данных, то можно их вообще перенести в сам поток, который будет сам создавать и разрушать их.
а в идеале вообще должен быть некий объект, ответственный за расчеты и все классы-наборы данных управляются этим объектом.
далее ты этот объект уже передается при надобности в поток, чтобы сделать расчет асинхронно, либо используется как есть для синхронного расчета.
источник

VA

Viktor Akselrod in Delphi & Lazarus
Сергей Пятыгин
Спасибо, те если клавиатура терпит насилие, то лучше так как сделал, со свойствами?
еще раз повторюсь - не могу сказать про fpc, но в делфи создать поле или свойство замкнутое на поле практически равнозначно. разница в десяток нажатий, а то и меньше
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Viktor Akselrod
вопрос риторический.
более правильно с точки зрения ООП, контролем за доступом в данным класса, учитывая возможную доработку классов в дальнейшем и тд использовать именно свойства.
но если прям вообще ничего такого не планируется, то и с полями будет норм работать
хотя я тоже сам не стал бы заменять свойства на поля при условии, что это публичный класс
А есть директива для публичного/приватного класса? Или имеется ввиду что то другое?
источник

VA

Viktor Akselrod in Delphi & Lazarus
Сергей Пятыгин
А есть директива для публичного/приватного класса? Или имеется ввиду что то другое?
под непубличными я имел ввиду вложенные классы (Nested classes)
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Nested_Type_Declarations
источник

z

zamtmn in Delphi & Lazarus
Viktor Akselrod
еще раз повторюсь - не могу сказать про fpc, но в делфи создать поле или свойство замкнутое на поле практически равнозначно. разница в десяток нажатий, а то и меньше
также. фпц копирует делфи, вариативно, местами делают лучше, местами хуже.
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Viktor Akselrod
под непубличными я имел ввиду вложенные классы (Nested classes)
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Nested_Type_Declarations
Понятно, спасибо!
источник

VA

Viktor Akselrod in Delphi & Lazarus
👌
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Viktor Akselrod
в принципе, если эти классы просто набор данных, то можно их вообще перенести в сам поток, который будет сам создавать и разрушать их.
а в идеале вообще должен быть некий объект, ответственный за расчеты и все классы-наборы данных управляются этим объектом.
далее ты этот объект уже передается при надобности в поток, чтобы сделать расчет асинхронно, либо используется как есть для синхронного расчета.
Пока этим объектом я планировал кнопку (магическую :)).
источник

VA

Viktor Akselrod in Delphi & Lazarus
Viktor Akselrod
под непубличными я имел ввиду вложенные классы (Nested classes)
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Nested_Type_Declarations
вдобавок сюда же идут классы, объявленные в секции implementation
источник

VA

Viktor Akselrod in Delphi & Lazarus
Сергей Пятыгин
Пока этим объектом я планировал кнопку (магическую :)).
уже много раз писали, но я повторюсь - в твоих расчетах не должно быть никаких кнопок, эдитов и тд.
класс расчета должен быть черным ящиком, которые получает на вход данные и отдает другие данные на выходе.
причем этот объект должен быть таким, что ты его с легкостью может использовать в GUI приложение, в консольке, UnitTest и тд
источник

RS

Renat Suleymanov in Delphi & Lazarus
Сергей Пятыгин
Тут как выше сказали правильно нельзя очищать объект. Ты же его передал потоку. Если поток этот объект обрабатывается, то пусть он там и создается и очищается. По сути ты поток запустил и передал объект и сразу же вслед за этим уничтожаешь. А поток то еще работает. Он же как начинает параллельно основному потоку "течь"
источник

RS

Renat Suleymanov in Delphi & Lazarus
Так что там в Execute тебе нужно очистить объекты. Ну и вообще это правило хорошего тона. Очищать объект на том же уровне, где и его и создавал. Лучше даже в той же самой процедуре и зоне видимости
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Viktor Akselrod
вдобавок сюда же идут классы, объявленные в секции implementation
не знал что так можно :)
источник

VA

Viktor Akselrod in Delphi & Lazarus
Сергей Пятыгин
не знал что так можно :)
более того, ты можешь объявить тип или переменную не только сразу после implementation, в любом месте ниже. можно между методами.
но это скорее из серии вредных советов 🙂
источник

RS

Renat Suleymanov in Delphi & Lazarus
Сергей Пятыгин
не знал что так можно :)
TObject можно не указывать. Он базовый для всех классов
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Renat Suleymanov
TObject можно не указывать. Он базовый для всех классов
Спасибо.
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Спасибо, то есть идея состоит в том чтобы создать некий Контролер (видимо это класс), который будет создаваться событием (к примеру нажатием все той же кнопки) и контролировать загрузку данных из гуи, запуск потока и вывод результата в гуи?
источник

VA

Viktor Akselrod in Delphi & Lazarus
Сергей Пятыгин
Спасибо, то есть идея состоит в том чтобы создать некий Контролер (видимо это класс), который будет создаваться событием (к примеру нажатием все той же кнопки) и контролировать загрузку данных из гуи, запуск потока и вывод результата в гуи?
почти.
пусть это будет "контроллер"
его кто-то создает, потом заполняет данными из ГУИ, настраивает каллбеки.
затем контроллер передается потоку на выполнение расчетов, либо расчеты выполняются в основном потоке.
по окончанию расчетов дергаются каллбеки, передающие результаты расчетов в аргументах, либо сам контроллер, если итоговые данные хранятся в нем же.
за разрушение контроллера отвечает либо поток в первом случае, либо вызывающий код во втором.
источник

KB

Kit Bayun in Delphi & Lazarus
в новой json-библиотеке, которая поставляется искаропки, начиная с 10.1 выдумали сделать так, что свойство index у массивов начинается с -1 (минус один), а не с 0.
http://docwiki.embarcadero.com/Libraries/Sydney/en/System.JSON.Builders.TJSONIterator.Index
а если это итерация по объектам джесона, то там индекс начинается с нуля.
это что за извращение?
источник