Цитата:
Сообщение от Obi
будет неразбериха. Гораздо понятнее будет написать
 Код AS1/AS2:
if(a != undefined) {
while(b > 0) {
Так можно и к 'hello world' прибавить 17, и все знают, что 17 сконвертируется в строку. Просто логично это явно указать, поскольку число к строке прибавить нельзя.
И да, простые типы тут совсем не в тему.
 Код AS3:
var tf:TextField = new TextField();
trace(Boolean(tf)) // true
Вот вам и текстфилд стал правдой.
К тому-же, что бы вы не говорили, но пятерка правдой быть не может. Воть хоть убейте меня, но — не может.
|
Если у вас в коде есть сравнения с undefined - у вас просто плохо написаный код. Переменная может быть undefined только если ее тип задан как var foo:*. Что, как уже говорилось, само по себе плохо. Я не говорю, что всегда писал / пишу хорошо, но за последние 2 года мне ни разу не пришлось сравнивать переменную с undefined в моем коде.
Простые типы как раз таки в тему, потому что вы конвертируете в Boolean, а он - простой тип. И пятерка и TextField могут быть правдой, вы сами только что это написали... мало того, что вы спорите с очевидным, так еще и с самим собой...
Цитата:
Сообщение от iNils
Писать надо так, чтобы условие трактовалось однозначно. Написание if (переменная) не будет трактоваться однозначно.
Если пример будет разбирать другой программист, то у него возник вопрос, что подразумевалось под этой записью. Что переменная имеет значение? Или что оно не должна быть равным нулю? Или и то и другое?
|
Причина не в однозначности, а в том, что это не элемент оформления кода, код будет выполнятся по-разному в обоих случаях.
Т.е. пример разного форматирования:

Код AS3:
if ( a ) a++;
и

Код AS3:
if(a)
{
a++;
}
оба примера идентичны, разница только в форматировании.

Код AS3:
if (a < 0) a++;
и

Код AS3:
if (a) a++;
примеры не идентичны и скомпилируются в разный байткод.
И, это уже мое скромное мнение: объяснения писать в комментах, незачем портить код для того, чтобы кому-то было удобнее читать.
ЗЫ. Особенно касательно переменных типа Number, int, uint - они не могут быть undefined ни при каких раскладах, максимум NaN для Number - поэтому ремарка не особо в кассу...