- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
private function handleBtnEvent(evt:MouseEvent):void
{
switch(evt.currentTarget)
{
case exitBtn:
break;
case nextBtn:
handleNextRounder();
break;
case reportBtn:
handleReport();
break;
case hangUpBtn:
case stopBtn:
if(evt.currentTarget == stopBtn && _randomRoundStarted ||
evt.currentTarget == hangUpBtn)
handleHangUp();
else
handleLeaveRandomRound();
break;
}
enableMouseInteraction(false);
TweenLite.delayedCall(1,enableMouseInteraction,[true]);
}
Еще одно чудо народного зодчества от предыдущих ваятелей :)
Для этих целей существует setTimeout.
Более того, свитч в этом месте не то что не нужен, он вреден. Нужно было каждому событию добавить по слушателю (что в приниципе и было сделано), и убрать эту братскую могилу вообще.
Говнистость этого кода, в моем понимании в том, что используя switch в этой функции мы проверяем дважды одно и то же условие, что можно избежать используя if-else например.
По поводу свитча против отдельных слушателей -- тут тоже могут быть разные соображения. Включая то, что придётся дублировать последние две общие строчки, и вырастет размер байткода (не знаю, как на ActionScript, а на Java, где функциональность делается через классы -- существенно). Да и компактнее один свитч в одном месте.
Свитч неудобочитаемый, особенно ввиду того, что, например, дают вам через пару дней лог ошибки с номерами строк, а вы в этом классе делали небольшую правку - поди разбери в каком из кейсов была ошибка. А если это функция - то хоть куда ее передвинь, все равно потом найдется.
Кроме того, повторно использовать кейс безо всей функции - ну никак :) А шансы того, что нужно будет во всех случаях какой-то общий фунционал примерно равны шансам, что в каждом случае нужен будет какой-то взаимоисключающий функционал (врезультате которого и появился, например, данный код).
детектед.
Если в ActionScript можно ссылаться без оверхеда прямо на конкретный метод -- тогда вопросов нет. Тем более, для каждого варианта (кроме stopBtn) уже предусмотрен отдельный метод.
А что javac не заинлайнит таких слушателей, это ж очевидные кандидаты?