Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.02.2009, 20:17
r_r_f_r вне форума Посмотреть профиль Отправить личное сообщение для r_r_f_r Найти все сообщения от r_r_f_r
  № 21  
Ответить с цитированием
r_r_f_r

Регистрация: Sep 2008
Адрес: Москва
Сообщений: 224
Блин, я думал где-то такая чудо инфа имеется, спасибо

Старый 21.02.2009, 20:18
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 22  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Читабельность любого кода это больше привычка форматировать код и давать понятные наименования переменным и командам, чем выбирать каким операторами его записывать).
На сколько мне известно анализ любого логического условия выполняется до тех пор пока у результата есть неопределенность:
1. a && b при a=false не будет дальше анализировать b, это излишняя операция
2. a || b при a=true не будет дальше анализировать b, это излишняя операция
и т.д.
Я придерживаюсь такой методики: Если условие простое и выполняется в одну операцию то стараюсь выполнять при помощи ? или if. Когда подразумевается многоступенчатая проверка if elseif ... то предпочитаю switch.
На счет того что не видно какие условия проверки есть простой прием
Код AS3:
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('Неопознанный контрол.');
				}
Мне читать такой код проще чем череду из if. Сразу видно что и с чем работает. И секцию если она не отрабатывает проще пропустить и найти следующую. И потом у свитча есть такая полезная функция как объединение нескольких условий по пропуску break, что тоже облегчает чтение чем разбирать какие из вложенных if будут работать а какие нет.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 21.02.2009, 21:54
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 23  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Раз уж пошла такая пьянка, расскажите, как описанные выше способы соотносятся по быстродействию с хешами.
__________________
тонкий тролль, осеянный благодатью

Старый 22.02.2009, 15:05
godknowsiamgood вне форума Посмотреть профиль Отправить личное сообщение для godknowsiamgood Найти все сообщения от godknowsiamgood
  № 24  
Ответить с цитированием
godknowsiamgood

Регистрация: Jan 2009
Сообщений: 15
Свитч работает гораздо быстрее. Например,

if (val == 1)
...
else if (val == 2)
...

В данном случае проверяются все ифы, пока не дойдет до верного условия.

А в случае с кейсом - компилятор строит такой код, который выполняет некоторые нехитрые арифметические операции с адресами, и таким образом происходит сразу прыжок на нужный код.

Хотя я знаю, что это верно применительно к C++.


Последний раз редактировалось godknowsiamgood; 22.02.2009 в 15:07.
Старый 22.02.2009, 15:14
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 25  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
godknowsiamgood, ни к С++ ни к АС ваши слова отношения не имеют.

Старый 22.02.2009, 15:27
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 26  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
Насколько я помню, оптимизирующие компиляторы C++ умеют делать таблицы перехода для больших switch (сотни case), вместо набора if'ов.

Старый 22.02.2009, 16:13
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 27  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
В данном случае проверяются все ифы, пока не дойдет до верного условия.
А в случае с кейсом - компилятор строит такой код, который выполняет некоторые нехитрые арифметические операции с адресами, и таким образом происходит сразу прыжок на нужный код.
Думаете break просто так пишут?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 22.02.2009, 21:33
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 28  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Цитата:
Сообщение от VVall Посмотреть сообщение
Насколько я помню, оптимизирующие компиляторы C++ умеют делать таблицы перехода для больших switch (сотни case), вместо набора if'ов.
Логично было бы тогда все if`ы переводить в switch`и при комплияции, нэ?

2iNils: не понял сути твоего поста =)

Старый 22.02.2009, 22:41
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 29  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Логично было бы тогда все if`ы переводить в switch`и при комплияции, нэ?
Не в курсе тонкостей, но вроде это связано с кэшем - обращение к таблице медленнее нескольких условий.

Старый 22.02.2009, 23:51
godknowsiamgood вне форума Посмотреть профиль Отправить личное сообщение для godknowsiamgood Найти все сообщения от godknowsiamgood
  № 30  
Ответить с цитированием
godknowsiamgood

Регистрация: Jan 2009
Сообщений: 15
Цитата:
Сообщение от BlooDHounD Посмотреть сообщение
godknowsiamgood, ни к С++ ни к АС ваши слова отношения не имеют.
Не понимаю. Вот нашел:
It is well known that many C compilers will attempt to convert a switch statement into a jump table.

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:44.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 14:44.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.