Дож писал(а):Комментарий такой, что более-менее любая подобная претензия один-в-один переделывается на претензию к TObject. Мысленно представь себе TList вместо TDynArrayOfInteger в коде и аналогичные проделываемые действия. Arr тоже попортится.
разумеется, он не попортится. Arr и Brr будут указывать на один и тот же инстанс, и изменения через Brr будут видны через Arr.
Добавлено спустя 3 минуты 25 секунд:Дож писал(а):1. Программист должен понимать, что A := B для object'ов — весьма специфичное действие и чревато серьёзными последствиями
ну не то что бы оно чревато серьёзными последствиями. Оно действительно чревато, но в том случае если A будет вызывать определённые изменения, которые не отразятся в B. Например если после присовения A использовать только "для чтения" то ничего плохого не произойдёт
А ещё всё зависит от внутренеей реализации A и B ... так что лучше всегда думать про серьёзные последствия.
Добавлено спустя 1 час 59 минут 28 секунд:Лекс Айрин писал(а):Это не спорю. Просто не понимаю как это применяется и накуа вообще нужно. Ведь по идее, ООП должно все это прекрасно преодолевать.
Во-первых, чтобы набирать меньше кода. Один раз написал шаблон кода, а потом говоришь компилятору какой тип данных в шаблон подставить, и используешь.
Второе истекает из первого. Потому что тип, который ты используешь может быть и не объект. Например, чтобы положить в TList какой-нибудь record, то придётся этот record держать в куче, используя GetMem / FreeMem. Именно потому что реализация TList-а заточена на использование Pointer-а, в качестве элемента листа.
А при использовании генерика TList<T>, реализация будет заточена под тот тип, который ты хочешь. И это вполне может быть тот самый record.
Может быть крайне удобно для создания каких-нибудь карт, хэш листов и списков для поиска.
Проблема, как ни странно, не в технологии, а в людях. Или точнее, как люди её используют. И чтобы её (технологию) правильно использовать, её нужно хорошо знать.
Например ООП. Это же хорошо и замечательно. Но, люди стали писать библиотеки основанные на ООП, даже в тех местах, где без объектов в принципе можно обойтись.
Например, как распаковать PNG файл, и получить из него массив пискелей?! Есть кучи и кучи библиотек с объектом аля TPNGImage, но каждый из них привязан к собственной библиотеке (экосистема же!). Или опять же привязан к VCL, LCL или FCL библиотеке. Но ведь совсем не факт, что я, как программист, опираюсь на VCL, LCL или FCL.
Как итог, имеет кучу одинакового взаимно дублирующего кода. В каждой вариации свои ошибки. Переносить и поддерживать которые тяжёло, потому что привязка к библиотечно экосистеме мешает.
А с дженериками, это же вообще песня, городить однотипный огород. Уверен, много кто, опубликует (благо github!), свой вариант STL для паскаля
И кстати сказать, вроде бы с Helper-ами такого не случилось
Я не боюсь технологий, я боюсь людей