|
|
|||||
Psycho Tiger, а причем тут ерроревент? Я думал мы говорим о ситуации, когда объект А говорит объекту Б слазить на сервак и после обработки результата рассказать о нем через колбек, либо событием.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Цитата:
Цитата:
На самом деле я скажу так: передача метода прямым текстом почти всегда хуже, чем событие. Почти всегда — это скорее всего относится к случаям, когда Вы задумываетесь. Я вижу 1 причину: скорость в особо-критичных-местах. Но ёлки-палки, какие особо критичные места в колл-беке? ENTER_FRAME? Дак он нативно рассылается. Ещё что-то вроде GoF Command/транзакций можно сюда приплести. Только там не очень коллбек, имо.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
2PsychoTiger: А мне вот наоборот, в большинстве случаев неудобно пользоваться эвентами...
По крайней мере в тех случаях, когда мне надо: Добавить строчку подписи на эвенте Запустить команду В обработчике отписаться. Т.е. это +2 строки, + я не могу нормально воспользоваться анонимной функцией...
__________________
Искренне Ваш, Джек. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Цитата:
Вызов метода подразумевает жесткую связь между вызывающим классом и классом, в котором оное вызывается, что само по себе не айс. Конечно, в addEventListener мы передаем тот же метод, но связь жесткой я уже не назову, т.к. это обыгрывается нативно и по сути классы ничего не связывает.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
Во первых не вижу абсолютно никакой разницы в разнице связности...
Так же не вижу ничего зазорного в использовании анонимных функций, иногда это очень удобно... Добавлено через 8 минут Пример который я приводил в самом начале, с connected... На самом деле это был просто пример, а в реальности вызова у меня выглядят так: Ошибка конекта с сервером естественно будет обрабатывать вовсье не здесь, а глобально для connetcion, естественно через событие... А конкретно обработчик onLogin должен получить только ОК, либо ошибку связанную с паролем, и обработать ее в соответствующем месте. Применять тут события нет никакого смысла. Это только усложнит код и его читабельность.
__________________
Искренне Ваш, Джек. Последний раз редактировалось JackFromChaos; 24.01.2011 в 04:03. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Цитата:
Цитата:
Может если Вы один работаете над проектом это допустимо. Но в случае командной разработки может быть совсем неочевидно, почему половина сделана так, половина так. Цитата:
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
В большинстве случаев, когда появляется необходимость создать анонимную функцию, альтернативой является написание дополнительного класса. А это:
1) Увеличение сложности восприятия кода 2) Дополнительные 10-20 строк, и новый класс 3) Вряд ли тут получится сильно сэкономить память... Впрочем, не вижу смысла в этом споре... Уверен, что каждый останется при своем мнении...
__________________
Искренне Ваш, Джек. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Приведите, пожалуйста, пример, когда анонимная функция сильно улучшает восприятие кода.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
Сходу в голову ничего не приходит, но как академический пример:
for (var i:int = numChildren - 1; i >= 0; i--) { var displayObject:DisplayObject = getChildAt(i); setTimeout(i * 100, function():void { displayObject.visible = false } ); } for (var i:int = numChildren - 1; i >= 0; i--) { var displayObject:DisplayObject = getChildAt(i); setTimeout(i * 100, hide, displayObject); } ... private function hide(displayObject:DisplayObject):void { displayObject.visible = false; } Добавлено через 6 минут Если предположить, что в нашем распоряжении нет в setTimeout параметра arguments, то нам бы пришлось, вероятно, делать что-то типа: import flash.display.DisplayObject; import flash.utils.setTimeout; public class Hidder { private var _displayObject:DisplayObject; public function Hidder(displayObject:DisplayObject,time:int) { _displayObject = displayObject; setTimeout(hide, time); } private function hide():void { _displayObject.visible = false; _displayObject = null; } }
__________________
Искренне Ваш, Джек. Последний раз редактировалось JackFromChaos; 24.01.2011 в 15:32. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Цитата:
Давайте половину API выкинем ради того, чтобы показать, что анонимные функции "удобные".
__________________
Тут мужик танцует и поёт про флэш |
Часовой пояс GMT +4, время: 04:30. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|