Цитата:
Сообщение от
dech
Любая коллекция упрощает понимание кода. Коллекции позволяют работать на более высоком уровне абстракций.
Вопрос спорный и не однозначный. Зависит от конкретной задачи и личных предпочтений разработчика
В данной задаче - все наоборот.
Цитата:
Сообщение от
dech
Может и утяжеляет в плане производительности, но насколько? Что нам стоит выделить память под несколько объектов? Не встанет же аксапта колом?
Если вопрос "вообще", то вполне может! Объекты map (имею в виду коллекции) требуют большое количество оперативной памяти. При небольшом количестве элементов (как в данной задаче) - это не критично. Но если речь идет хотя бы о нескольких сотнях элементов, то это чудовищные потери производительности и просто гигантские затраты оперативной памяти.
Показательный пример - это классы работы с оборотно-сальдовыми ведомостями в Dax2009. Чудовищные тормоза и простая замена map на временные таблицы дает резкий скачок производительности даже без оптимизации остального кода.
В данной-то задаче это не критично, но, повторюсь, пихать мапы везде, потому что это "упрощает понимание кода" и "более высокий уровень абстракции" - не стоит. Надо понимать, что придется "принести в жертву" производительность.
Цитата:
Сообщение от
dech
Предлагаю пересмотреть ваше отношение к коллекциям.
Так я не против. Просто нельзя бездумно лепить их везде, где это теоретически возможно.
Цитата:
Сообщение от
dech
Можно и так, с появлением TFS комментарии теперь особо и не нужны. Пишу по регламенту разработки.
Я к тому, что замена на map, по сути, означает полное переписывание кода. Не исправление замеченных ошибок и недоработок, а именно полная замена. И отдельные вкрапления старого кода
Это в принципе другая идеология написания кода.
В принципе, тут вообще не нужны ни контейнеры, ни map. Я не понимаю, почему не сконструировали команду Select-SQL за один проход по списку полей индекса. Ну, что-то вроде такого
X++:
strSelectList += ' count(*)';
fleldNum = 1;
if (dataPrCompany)
{
fleldNum++;
strSelectList += ', dataAreaId';
strGroupList += ', dataAreaId';
strOrderList += ', ' + int2str(fieldnum);
}
for (i = 1; i <= numberOfFields; i++)
{
if (...)
{
fleldNum++;
strSelectList += ', ' + fieldname;
strGroupList += ', ' + fieldname;
strOrderList += ', ' + int2str(fieldnum);
}
}
stmtStr = 'select ' + strSelectList +
'from ... group by ' + strGroupList +
' order by ' + strOrderList;
(...)
Это не полноценный код, разумеется. Просто, чтобы показать идею. Здесь контейнер или коллекция нужны разве что для вменяемого сообщения в случае наличия дублей. Да и наполнение этого контейнера/мапа делается там же, в основном (и единственном!) цикле
Здесь разработчик явно действовал "по шаблону". Причем взятому откуда-то из другого класса. Вот и получил то, что получил. Тоже, вероятно, думал об "абстракциях"
Но! Повторюсь, это будет уже не исправление существующего кода, а написание нового. В духе личных предпочтений