Показать сообщение отдельно
Старый 06.07.2009, 13:41
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 23  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Сообщение от 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 - поэтому ремарка не особо в кассу...
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 06.07.2009 в 13:45.