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

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

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
Arrow Сложные логические условия в return

Подскажите, плиз, как правильно записывать несколько кратких логических условий в return?
Например так записывается одно краткое if условие:
Код AS3:
return (wordFromStr == "Some" ? "Mr." : "Ms.") + wordFromStr;
А как мне записать что-то более сложное? Допустим несколько условий через оператор || или && ? Как можно вернуть значение на основании 2х или более if? Как записать else?

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Код AS3:
((wordFromStr == "Some" || wordFromStr == "somE") ? "Mr." : "Ms.") + wordFromStr;
А вложенные....
Код AS1/AS2:
var a:Boolean = true;
var b:Boolean = false;
var c:Boolean = true;
var v1:int = 1;
var v2:int = 2;
var v3:int = 3;
var v4:int = 4;
/// такая запись...
trace (a == b ? a == c ? v1 : v2 : b == c ? v3 : v4); 
 
var v:int;
/// ... аналогична такой
if (a == b) {
	if (a == c) {
		v = v1;
	} else {
		v = v2;
	}
} else if (b == c) {
	v = v3;
} else {
	v = v4;
}
trace (v);
Но первый вариант не читабелен вообще. Тернарную запись не стоит использовать сложнее вида (a ? b : c).
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Код AS3:
if (condition1 == "есть что выпить" && condition2 == "хочется выпить")
{
   drink();
}
else if (condition3 == "есть бабло")
{
   buy();
   drink();
}
else
{
   sport();
}
Код AS3:
(condition1 == "есть что выпить" && condition2 == "хочется выпить") ? drink() : condition3 == "есть бабло" ? (buy(), drink()) : sport();
Не успел. Надо меньше пить

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

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Сначала посчитать а потом вернуть. Я вообще никогда в return не пишу выражений, только готовые переменные.

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Я предложу исходить из здравого смысла.
Если для человека очевидно, что вернёт метод (например, метод getMin(a1,a2,a3)), то можно использовать двойную тернарную запись. Если не очевидно, то нужно упрощать выражение настолько, насколько её читабельность станет приемлемой.

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
Цитата:
Сначала посчитать а потом вернуть. Я вообще никогда в return не пишу выражений, только готовые переменные.
просто, стало интересно как этим пользоваться К тому же иногда сталкиваюсь с подобными записями в чужом коде.
Цитата:
Но первый вариант не читабелен вообще. Тернарную запись не стоит использовать сложнее вида (a ? b : c).
Да, наверное вы правы, потому что сам сейчас смотрю на эту строку
Код AS3:
trace (a == b ? a == c ? v1 : v2 : b == c ? v3 : v4);
и не стразу в неё въезжаю)) Хотя возможно это просто с непривычки.

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
Код AS3:
if (a == b) {
	if (a == c) {
		v = v1;
	} else {
		v = v2;
	}
} else if (b == c) {
	v = v3;
} else {
	v = v4;
}
Египетские скобки лично мне ломают восприятие (именно в этом случае), но тут на любителя.



Цитата:
и не стразу в неё въезжаю)) Хотя возможно это просто с непривычки.
А так?
Код AS3:
trace (a == b ? (a == c ? v1 : v2) : (b == c ? v3 : v4));
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.


Последний раз редактировалось GBee; 12.02.2011 в 22:28.
Старый 12.02.2011, 22:35
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 8  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
За вложенный тернарный оператор хочется бить по рукам (особенно, если без скобочек), или хотя-бы в глаза автору посмотреть
Вот какой из 2-х вариантов читается быстрее?
Код AS3:
return a == b ? (a == c ? v1 : v2) : (b == c ? v3 : v4);
Код AS3:
if (a == b)
{
    return a == c ? v1 : v2;
}
else
{
    return b == c ? v3 : v4;
}
Если наиболее частым вариантом является a != b, а a == b - это особый случай, то можно написать так:
Код AS3:
if (a == b)
{
    return a == c ? v1 : v2;
}
return b == c ? v3 : v4;
Еще, ИМХО, логику на if-ах править легче - легче выносить одинаковые значения в переменные


Последний раз редактировалось expl; 12.02.2011 в 22:39.
Старый 12.02.2011, 22:37
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 9  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
expl, ну типа первый вариант в одну строчку...

Старый 12.02.2011, 22:49
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 10  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
ты поломал мое мировоззрение

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

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

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


 


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


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