- 1
- 2
- 3
- 4
if (flash.net.getClassByAlias("foo.bar.VO") == null){
flash.net.registerClassAlias("foo.bar.VO", foo.bar.VO);}
} catch (e:Error) {
flash.net.registerClassAlias("foo.bar.VO", foo.bar.VO); }
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−190.8
if (flash.net.getClassByAlias("foo.bar.VO") == null){
flash.net.registerClassAlias("foo.bar.VO", foo.bar.VO);}
} catch (e:Error) {
flash.net.registerClassAlias("foo.bar.VO", foo.bar.VO); }
Так во флексовом фреймворке регистрируются алиасы для RPC классов... Нелогичность ситуации не сразу очевидна, поэтому опишу:
При загрузке модулей может возникнуть ситуация, когда алиас уже зарегистрирован для другого класса, поэтому нужно проверить, а не был ли алиас зарегистрирован раньше. Иначе, его нужно зарегистрировать. Исторически, этой проверки сначала не было, данный код - это фикс вышеописаной проблемы. Пытаясь разобраться, что же все-таки случилось - скорее всего "писатель" не подозревал, что getClassByAlias() не может вернуть null - а выяснил он это, когда код вывалился с ошибкой, вот он не долго думая завернул это все в try-catch...
Из мелких деталей: в рамках AS3 сравнение сложных типов с null - бессмысленная, и более того вредная операция, т.как выражение в условии всегда кастуется к Boolean, и компилятор не умеет делать оптимизации для таких случаев.
guest 08.01.2010 08:58 # 0
wvxvw 08.01.2010 13:44 # 0
Сорри, try отвалился когда постил.
А вообще, по логике должно было быть так:
guest 17.05.2010 18:01 # 0
http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/statements.html#if - ясно даёт понять, что ожидаемый тип выражения в скобках - Boolean.
http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/net/package.html#getClassByAlias%28%29 - ясно даёт понять, что возвращаемое функцией значение - ссылка на объект класса Class (ссылка может быть равна null).
Эээ, Boolean это Class? Объясните пожалуйста вредность и бессмысленность логичного подставления выражения типа Boolean в место, где ждут в нетерпением именно Boolean?
wvxvw 17.05.2010 18:33 # 0
2. Boolean - это класс, так он представлен в виртуальной машине, но к предмету обсуждения это отношения не имеет, т.как Class при касте к Boolean всегда вернет true, т.е. Boolean(Boolean) == true, при чем всегда :) Кроме того, сериализовать его таким образом не за чем, но, даже если вы зачем-то попытаетесь добавить алиас на него, то ни на что это не повлияет т.как значения типа Boolean записываются по другим правилам, и алиас там не учитывается.
3. Вам такое представление кажется логичным, а мне бессмысленным, потому что уже наличие if() для меня однозначно указывает на то, что выражение надо привести к Boolean. Если вам нравится много писать ради получения идентичного результата, который можно получить меньшими усилиями - это, как тут принято говорить, "китайский" подход :) Т.е. бессмысленное нагромождение лишних сущностей.
В варианте типа if (foo == null) будет больше операций, но они совсем не ресурсоемкие, так что если вы не гоняетесь за миллисекундами, то пишите, как хотите, погоды это не сделат, просто не удобно.
wvxvw 17.05.2010 18:49 # 0