PDA

Просмотр полной версии : Перлы кодогенерации


wvxvw
08.12.2009, 02:51
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); }
Естесственно, Flex.
В английском есть такое выражение: Third time - the miracle... Как-то они не до конца воплотили идею, чтоли...

gloomyBrain
08.12.2009, 03:56
Вопрос: как объяснить близким, что тебя улыбнуло, если ты читаешь программный код? =)
Я в тупике

wvxvw
08.12.2009, 04:42
ОК, по пунктам:
getClassByAlias - может выкинуть ошибку если класс не зарегистрирован, но тогда зачем нам в трай пихать еще и рeгистацию?
registerClassAlias - может выкинуть ошибку, но только если один из параметров равен нулю, но мы эту ошибку все равно не обработаем т.как мы повторяем ту же процедуру в кетч-блоке.
Выводы: мне очень слабо верится в вероятность зарегистрировать один и тот же класс для одного и того же алиаса дважды...
Но, даже, если такое возможно, и это баг плеера, то нам достаточно поставить только getClassByAlias в трай блок - регистрации там явно нечего делать. т.как ошибка будет только в случае, если мы еще не зарегистрировались, и в таком случае мы попадем в кетч-блок, и зарегистрируемся себе спокойно...
А вообще, если по большому счету - проверка и трай-кетч там вообще ни к чему...

divinus
08.12.2009, 12:21
wvxvw, ви таки не знали что существует специальный ресурс? :) http://govnokod.ru/actionscript3

gloomyBrain, если вас не улыбнул подобный изврат, сожалею, но я думаю вы сами склонны написать такое. вывод один - набираться опыта :)

wvxvw
08.12.2009, 14:23
Я там не зарегистрирован, и лень как-то...
А, и, это, для так сказать закрепления эффекта и надежности, я бы добавил еще пару строчек ;)
try
{
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);
}
finally
{
// Да шож такое!?
flash.net.registerClassAlias("foo.bar.VO", foo.bar.VO);
}

iflamberg
08.12.2009, 15:18
вполне достойно выкладывания на *****код

divinus
08.12.2009, 18:22
wvxvw, а можно еще так:

while(flash.net.getClassByAlias("foo.bar.VO") == null) {
try{
flash.net.registerClassAlias("foo.bar.VO", foo.bar.VO);
}catch (e:Error)
flash.net.registerClassAlias("foo.bar.VO", foo.bar.VO);
}finally{
// Да шож такое!?
flash.net.registerClassAlias("foo.bar.VO", foo.bar.VO);
}
}

gloomyBrain
08.12.2009, 21:29
gloomyBrain, если вас не улыбнул подобный изврат, сожалею
divinus, сожалею, что Вы сожалеете, но как бы улыбнуло, и не знаю с чего у Вас мысли об обратном. И *****код я писать не склонен (по крайней мере мне самому так кажется).