Category: it

Category was added automatically. Read all entries about "it".

Психи-программисты

Ковыряюсь в написанном на Lotus Notes банковском клиенте, на который наша контора перешла около года назад. Писала его в своё время одна фирма, потом, видимо, развалилась, сейчас поддерживает другая. Делали, похоже, совершенно разные программисты. Местами мне в принципе нравится логика автора, но код совершенно не вычищен, масса ляпов, кривых исправлений, работает всё через ужасную жопу. Но некоторые другие куски же писал просто псих. Представляете этакого помощника Сумасшедшего Учёного - всклокоченные волосы, безумные глаза, прожённый халат? Вот он.

Есть, например, процедура GetColor, возвращающая значение цвета (число - просто RGB) по его идентификатору. Для начала, чем мог бы быть идентификатор цвета - перечислением? Целочисленной константой? Нет, идентификатор - это строка! В процедуру передаётся "имя" цвета, вроде "Red" или "Dark violet-pink", хотя эти строки не имеют отношения к пользовательскому интерфейсу, а являются сугубо внутрипрограммными. Соответственно, таблица цветов описывается двумя массивами - в одном названия, в другом значения. Цветов знаем много - сто, массивы имеют по сто элементов. Поскольку сразу индексировать в таблицу при таком подходе нельзя, для поиска нужного цвета процедура делает поиск простым перебором. Уже хорошо, да? Дальше - больше. Как можно хранить значение цвета?Самый естественный вариант, казалось бы, хранить в массиве напрямую число-значение. Нет, во втором массиве хранятся... строки с шестнадцатеричной записью значения! После нахождения значения нужного цвета его надо преобразовать в число из строки - это делается два раза. Первый раз - при помощи библиотечной процедуры, полученный результат тут же выкидывается. Второй раз - вручную, при помощи своего куска кода, с ошибками, которые, к счастью, на работу не влияют. Ну и под занавес - где должны храниться массивы имён и значений? В глобальной константе или переменной? Они хранятся в локальной для процедуры структуре данных. И каждый вызов процедуры GetColor начинается с двухсот присваиваний, инициализирующих эти массивы. При всей нелюбви к падонкаффскому, я, как говорится, пацтулом.