Страницы

четверг, 19 марта 2009 г.

IF или религия

В этом посте все просто...Каждый программист даже самый ебанутый на голову задумывается о быстродействии своего кода в фундаментальном контексте( то есть хотя бы в контексте языка на котором он пишет)...Грубо говоря рано или поздно он начинает понимать, что куча операторов ветвления замедляют программу, вызовы процедур тоже,циклы тоже...
Фигасе , как свойственно человеку , мы вдаемся в крайности - то есть начинаем избегать лишнего их использования , а этого мы можем добиться только либо использую более сложные структуры данных , либо более извилистый(закавыристый) код ...
Далее мы рождаем две следующие проблемы
1) наш код становится менее понятным( и для нас самих через месяц другой )
2) Его изменение становится очень трудоемким ( простой пример если один флаг используется повсеместно везде или одна переменная для всех циклов в процедуре )

Бзз это убивает наше время...Мы трудным путем идем к идеалу и в то же время от него отталкиваемся - потому что перманентного идеала не существует,или можно перефразировать так идеал вещь относительная...
Суть в том что количество операций процессора исчисляется миллиардами в секунду, а и по сравнениею с этим избавление от одного if и экономление
нескольких десятков операций не имеет значения....
Пример из повседневной жизни программиста - проверка введенных значений формы первые два варианта событий для ООП:
1) Придумываем глобальный класс ,потом для каждой формы наследуем от этого класса и работаем
2) для каждой формы написать процедуру проверки с несколькими своими if-ами

В первом варианте мы потратим время на придумывание подходящей архитектуры,а потом, недели через две, будем со скрипом вспоминать как натягивать конкретный пример.
Во-втором примере мы будем знать куда лезть ,чтоб быро все поправить.
В итоге в первом примере мы выиграем допустим 10 милисекунд( это дохрена вообще-то), но эти милисекунды спокойно схаваються к примеру при маршрутизации пакетов по сети. Даже при клиентском приложении пользователь не заметит разницы в 10 милисекунд. И нахера вы спрашивается мудохались....
Но допустим вам надо собрать статистику с 1000 записей....Разница понятна...Об это был предыдущий пост в этом блоге.

2 комментария:

Анонимный комментирует...

Всё-таки интересно, как можно избавиться от "if" с помощью "закавыристого кода" или "структур данных". Я думал, от "if" можно избавиться только точно зная значение условия "if".

Богдан комментирует...

от if нельзя избавится ;)
но можно например в базе данных использовать поля постоянной длины,вместо переменной ,чтоб избавится от лишней проверки на каждую запись при выборке(уже при 1000 записях будет существенно)