![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2008
Адрес: Москва
Сообщений: 224
|
Блин, я думал где-то такая чудо инфа имеется, спасибо
![]() |
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Читабельность любого кода это больше привычка форматировать код и давать понятные наименования переменным и командам, чем выбирать каким операторами его записывать).
На сколько мне известно анализ любого логического условия выполняется до тех пор пока у результата есть неопределенность: 1. a && b при a=false не будет дальше анализировать b, это излишняя операция 2. a || b при a=true не будет дальше анализировать b, это излишняя операция и т.д. Я придерживаюсь такой методики: Если условие простое и выполняется в одну операцию то стараюсь выполнять при помощи ? или if. Когда подразумевается многоступенчатая проверка if elseif ... то предпочитаю switch. На счет того что не видно какие условия проверки есть простой прием var obj:* = event.target; switch (true) { case obj is Map: map = obj as Map; currentScroll = map; addEventListener(NavigatorEvents.MOUSE_OVER, hnMouseOverChildControl); break; case obj is Classificator: classificator = obj as Classificator; break; case obj is ButtonScaleDown: btnScaleDown = obj as ButtonScaleDown; addEventListener(NavigatorEvents.SCALE_DOWN_START, hnScaleDownStart); addEventListener(NavigatorEvents.SCALE_DOWN_STOP, hnScaleStop); addEventListener(NavigatorEvents.SCALE_DOWN_ENABLED, hnScaleDownEnabled); addEventListener(NavigatorEvents.SCALE_DOWN_NOT_ENABLED, hnScaleDownNotEnabled); break; case obj is ButtonScaleUp: btnScaleUp = obj as ButtonScaleUp; addEventListener(NavigatorEvents.SCALE_UP_START, hnScaleUpStart); addEventListener(NavigatorEvents.SCALE_UP_STOP, hnScaleStop); addEventListener(NavigatorEvents.SCALE_UP_ENABLED, hnScaleUpEnabled); addEventListener(NavigatorEvents.SCALE_UP_NOT_ENABLED, hnScaleUpNotEnabled); break; default: throw Error('Неопознанный контрол.'); }
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 15
|
Свитч работает гораздо быстрее. Например,
if (val == 1) ... else if (val == 2) ... В данном случае проверяются все ифы, пока не дойдет до верного условия. А в случае с кейсом - компилятор строит такой код, который выполняет некоторые нехитрые арифметические операции с адресами, и таким образом происходит сразу прыжок на нужный код. Хотя я знаю, что это верно применительно к C++. Последний раз редактировалось godknowsiamgood; 22.02.2009 в 15:07. |
|
|||||
|
стервочка (я мужик)
|
godknowsiamgood, ни к С++ ни к АС ваши слова отношения не имеют.
|
|
|||||
|
Регистрация: Feb 2009
Сообщений: 1,195
|
Насколько я помню, оптимизирующие компиляторы C++ умеют делать таблицы перехода для больших switch (сотни case), вместо набора if'ов.
|
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
|
|
|||||
|
Цитата:
2iNils: не понял сути твоего поста =)
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Feb 2009
Сообщений: 1,195
|
Не в курсе тонкостей, но вроде это связано с кэшем - обращение к таблице медленнее нескольких условий.
|
|
|||||
|
Регистрация: Jan 2009
Сообщений: 15
|
Не понимаю. Вот нашел:
It is well known that many C compilers will attempt to convert a switch statement into a jump table. |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:03. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|