Что, черт возьми, делает loader.load ((newSource - это URLRequest)? NewSource: new URLRequest (newSource)); делать?

Я наткнулся на следующий код в SuperImage Эли Гринфилда из его компонента Book - я понимаю loader.load ( ) а что остальное делает?

loader.load((newSource is URLRequest)? newSource:new URLRequest(newSource));

Это похоже на какой-то сумасшедший встроенный оператор if, но все же я немного озадачен. И если это оператор if - лучше ли это, чем обычный оператор if?


person onekidney    schedule 29.09.2008    source источник
comment
Сколько раз я могу использовать оператор if в одном сообщении? :)   -  person onekidney    schedule 29.09.2008


Ответы (4)


? называется «тернарным оператором», и его основное использование:

(expression) ? (evaluate to this if expression is true) : (evaluate to this otherwise);

В этом случае, если newSource является URLRequest, loader.load будет передан newSource напрямую, в противном случае ему будет передан новый URLRequest, созданный из newSource.

Тернарный оператор часто используется как более сжатая форма оператора if, поскольку он позволяет встраивать if. Соответствующий код в этом случае будет:

if (newSource is URLRequest)
   loader.load(newSource);
else
   loader.load(new URLRequest(newSource));
person workmad3    schedule 29.09.2008

В основном он говорит: если источник новостей является типом URLRequest, то передайте переменную newSource в метод загрузки, если это не тип URLReuqest, создайте новый URLRequest и передайте его в метод загрузки.

Основной синтаксис: (условие)? (код для выполнения, если true): (код для выполнения, если false)

person Jason Miesionczek    schedule 29.09.2008

здесь используется тернарный оператор?:. первая часть - это условие между? и: что возвращать, если условие истинно. после: то, что возвращать, если условие ложно.

более простой пример

String str = null;
int x = (str != null) ? str.length() : 0;

будет таким же, как

String str = null;
int x;
if (str != null)
  x = str.length()
else
  x = 0;
person Matt    schedule 29.09.2008

Насколько мне известно, в основном это означает, что он спрашивает, является ли эта переменная классом newSource String или URLRequest, как объяснили workmad и jason. Если это URLRequest, он запустит loader.load (newSource: URLRequest). Если это не URLRequest, это автоматически означает, что это строка (другими словами, URL-адрес). И в этом случае он запустит loader.load (новый URLrequest (newSource: String).

Полный код может выглядеть примерно так:

function myFunction(newSource:Object):SomeClass {
var loader:URLLoader = new URLLoader();
loader.load((newSource is URLRequest)? newSource:new URLRequest(newSource));
}

С уважением,

Филипе А.

person Community    schedule 26.03.2009