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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.05.2012, 13:10
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 1  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию быстрое ( лаконичное ) && ||

Давно мучает вопрос. Есть например вложенность
Код AS3:
a.b.c.d = 10;
И условие
Код AS3:
if ( a.b.c.d == 20 || a.b.c.d ==30 || a.b.c.d == 0)
Ествесвенно делать такую запись нерационально, особенно если вместо букв длинные слова. Поэтому часто мы прибегаем к методу :
Код AS3:
var a:int = a.b.c.d;
if( a == 20 || a == 30 ... )
Это уже более читабельно и понятно.
А есть какие нибдуь другие методы? В частности хочется как то так
Код AS3:
 if(a.b.c.d == 20 || 30 || 0)
__________________
Марк Tween

Старый 24.05.2012, 13:28
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 2  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
1.
Код AS3:
switch (a.b.c.d)
{
   case 20:
   case 30:
   case 0:
      ...
      break;
}
2. Самый вменяемый способ, т.к. документирует код и уменьшает копипасту.
Тёмная сторона - потеря производительности, возможна потеря нити рассуждений при чтении кода, т.к. приходится скроллить на функцию (но обычно, если тяжело читать условия и код не критичен - выношу их в функции):
Код AS3:
function isNeeded(a:int):Boolean
{
   return a == 20 || a == 30 || a == 0;
}
 
if (isNeeded(a.b.c.d))
{
    ...
}
3. Относительно наглядно, но крайне невыгодно по производительности. Т.е. такой метод можно использовать только в тестах (где все средства хороши), а в коде по сравнению с выносом переменной - выгода от наглядности слабовата, а потери производительности высоки:
Код AS3:
 if([20, 30, 0].indexOf(a.b.c.d) != -1)
4. А вообще единственный косяк метода с переменной - это то что она будет мешаться во всей функции (из-за дурацкого подхода в AS3 к областям видимости переменных). А так не знаю, чем он вам не нравится.


Последний раз редактировалось expl; 24.05.2012 в 13:32.
Старый 24.05.2012, 13:52
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 3  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Код AS3:
if([20, 30, 0].indexOf(a.b.c.d) != -1)
Классный метод! Давно искал! +

Старый 24.05.2012, 13:54
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 4  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Ну эти методики ( кроме посл ) это все понятно. Я думал может какие обретки в условиях можно делать. выходит нет.

Добавлено через 35 секунд
Цитата:
Код AS3:
if([20, 30, 0].indexOf(a.b.c.d) != -1)
Классный метод! Давно искал! +
А что ты будешь делать в случае a > 30 , a <= 10 ?
__________________
Марк Tween

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

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Можно сделать обертку и пользоваться ей типа так:
Код AS3:
new Expression(5).lessThen(10).equals(3).higherThen(1).result();//true/false
Но тоже городьба.

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

Регистрация: Feb 2012
Сообщений: 1,540
Цитата:
А что ты будешь делать в случае a > 30 , a <= 10 ?
А я про это и не говорил.

Старый 24.05.2012, 14:41
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Код AS3:
if (a.b.c.d in {20:1,30:1,0:1})

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

Регистрация: Feb 2012
Сообщений: 1,540
Цитата:
if (a.b.c.d in {20:1,30:1,0:1})
А теперь соскреби мой мозг со стены
Объясняй.

Старый 24.05.2012, 15:03
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 9  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
{20:1,30:1,0:1} это создание объекта с ключами 20, 30, 0.
in проверяет существует ли такой ключ в объекте или массиве
__________________
:)

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

Регистрация: Feb 2012
Сообщений: 1,540
Цитата:
{20:1,30:1,0:1} это создание объекта с ключами 20, 30, 0.
in проверяет существует ли такой ключ в объекте или массиве
Спасибо, тоже неплохой вариант.

Добавлено через 2 минуты
Может, попробовать создать класс, как говорил kackbip?
Только, вот так:
Код AS3:
Numb.er(num:Number).less(...args).higher(...args).eq(...args).test(); // true or false

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

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

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


 


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


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