Является ли оператор && в ActionScript ленивым? - PullRequest
0 голосов
/ 05 июля 2010
var b:Boolean = condition1() && condition2();

В этом утверждении, если condition1() оценивается как false, будет condition2() оцениваться?

Ответы [ 3 ]

7 голосов
/ 05 июля 2010

Да. Оператор && (а также ||) имеет короткое замыкание .

Это было объяснено в http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/operators.html#logical_AND.

Возвращает expression1, если это false или может быть преобразовано в false, и expression2 в противном случае. Примерами значений, которые можно преобразовать в false, являются 0, NaN, null и undefined. Если вы используете вызов функции как expression2, , функция не вызывается, если expression1 оценивается как false.

3 голосов
/ 05 июля 2010

Небольшое приближение указывает на да . Кроме того, обычный термин короткозамкнутый , а не ленивый .

0 голосов
/ 15 февраля 2013

Правильно.Компилятор должен всегда выбирать самый быстрый путь из условного.Если какой-либо тест завершается неудачно, компилятор знает, что результаты дальнейших тестов не имеют значения, и решает сразу же внести залог.потому что Obj это ноль.Это тоже хорошо, потому что второй контрольный пример выдаст ошибку, так как вы не можете разыменовать нулевой объект таким образом.Я использовал этот конкретный подход много раз, когда мне нужно убедиться, что какой-то объект не равен нулю, прежде чем разыменовывать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...