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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.06.2013, 11:14
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 1  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
По умолчанию Правильное использование "расширенного" оператора ветвления (s1 ? s2 : s3)

Доброго времени суток.
Возник вопрос адекватности применеия "упрощенного" оператора ветвления:
Код AS3:
statement1 ? statement2 : statement3;
в случае, когда это ветвление не полное.
Приходится писать
Код AS3:
statement1 ? null: statement3;
или
Код AS3:
statement1 ? statement2 : null;
Собственно вопрос - насколько оправдано вообще использовать этот оператор для неполного ветвления с точки зрения эстетики кода и адекватности/скорости/производительности выполнения?

Старый 04.06.2013, 11:18
zuxul вне форума Посмотреть профиль Отправить личное сообщение для zuxul Найти все сообщения от zuxul
  № 2  
Ответить с цитированием
zuxul

Регистрация: Dec 2009
Адрес: 59°13′N, 39°54′E
Сообщений: 445
Записей в блоге: 1
IF уже не рулит?

Старый 04.06.2013, 11:26
FieryWall вне форума Посмотреть профиль Отправить личное сообщение для FieryWall Найти все сообщения от FieryWall
  № 3  
Ответить с цитированием
FieryWall
 
Аватар для FieryWall

Регистрация: Nov 2010
Сообщений: 190
Отправить сообщение для FieryWall с помощью ICQ Отправить сообщение для FieryWall с помощью Skype™
вполне оправдано, заменяет кучу строк условий, более четабелен во многих случаях; что касаеться производительности - проведите тест

Старый 04.06.2013, 11:27
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 4  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Тут дело не в оправданности, а в читабельности, стиле и конвенции команды, в которой вы участвуете. Лично я отдал бы предпочтение if'у.
Скоуп if'а является и скоупом всего метода, тут в as3 с этим проще, поэтому ничего не мешает записать
Код AS3:
if (statement) {
    var some:T = ...;
}
После компиляции some перемещается в хедер метода (подправьте терминологию) и инициируется по умолчанию null'ом.
__________________
тут я

Старый 04.06.2013, 11:38
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 5  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Ну если нужно сделать что-то, что не умещается в одну строчку, то тут лучше с if, не спорю)

Просто этим расширенным оператором очень удобно избавляться от ошибок удаления несуществущих дисплей объектов, например
Код AS3:
this.graphicСontainer.contains(graphicElement) ? this.graphicСontainer.removeChild(graphicElement) : null;
Протестирую тогда потом производительность отдельно

Просто на забугорных ресурсах ничего не нашел по этому поводу и в книжках тоже не встречал, если память не изменяет

Старый 04.06.2013, 11:48
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 6  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Оператор просто используется не по назначению. Он возвращает определенное значение. Здесь лучше использовать вместо этой громоздкой длинной конструкции вот такую:
Код AS3:
if (graphicElement.parent == graphicСontainer) {
    graphicСontainer.removeChild(graphicElement);
}
Во-первых, contains пробегает по всем вложенностям. Во-вторых такая конструкция ничего не возвращает и понятна глазу.
__________________
тут я

Старый 04.06.2013, 11:48
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 7  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Просто этим расширенным оператором очень удобно избавляться от ошибок удаления несуществущих дисплей объектов
И чем это "удобней" обычного
Код AS3:
if(this.graphicСontainer.contains(graphicElement)) this.graphicСontainer.removeChild(graphicElement);
?
__________________
Reality.getBounds(this);

Старый 04.06.2013, 11:50
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 8  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
КорДум О, спасибо за разъяснения)
Вопросы отпали

Wolsh почему то вторая конструкция выглядит более громоздкой, может это проблемы восприятия конечно

Старый 04.06.2013, 11:56
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 9  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Возможно, это потому что Вы еще не воспринимаете тернарный оператор как возвращающий значение, и затычки вроде null Вас не смущают. Я, например, спотыкаюсь мозгом на таких записях. Требование обязательного наличия правой части, как и требование того, что части могут содержать только одно выражение, исходит именно из необходимости вернуть значение. Таково предназначение этого оператора — выбрать значение, а не действие.
Нормальное применение тернарного оператора:
Код AS3:
a = bool ? b : c;
trace(bool ? string1 : string2);
__________________
Reality.getBounds(this);

Старый 04.06.2013, 12:01
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 10  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Wolsh да да, именно поэтому. Не воспринимал эту запись как непременно возвращающую значение. Смущала как раз затычка null, поэтому и решил спросить. Сейчас в голове щелкнуло, разобрался с оператором, спасибо за ответы.)

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

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

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


 


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


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