Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.01.2011, 01:36
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 11  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Не знаю по мне колбек нужен по ситуации. Вот такой пример есть :
Скажем вы используете класс стороннего разработчика, создающий дисплей объект в зависимости от настроек xml. При этом xml берется с хоста разраба. ( в принципе это и не важно даже). В итоге, после загрузки того самого xml создается этот объект. - далее происходит тот самый коллбек, который вам дает возможность продолжить описание своего Main.

Код AS3:
class Main
....
addChild(object(func));
function func() {
 trace('object created')
 do something
}
.....
Тоесть в итоге объект появился в дисплей листе - и мы теперь можем с ним работать. В чем принципиальная разница в данной ситуации - в удобстве работы. Разработчик мог бы сделать КастомЕвент для данной операции, и тогда бы уже писалось
Код AS3:
object.addEventListener(ObjectEvent.OK, ok);
1. Лишняя ( дополнительная) строка по добавлению события ( ну допустим другие события и не создаются для объекта кроме одного этого)
2. В памяти висит этот эвент пока не очистится мусорщиком или не будет удален вручную
Имхо

Добавлено через 2 минуты
Ну а по факту, кому как нравится, можно делать по разному. Если вы понимаете и то и то, логично , что в итоге в зависимости от ситуации вы сделаете лучшую реализацию , чем тот, кто этого не понимает, и вам же проще потом будет с этим работать, и понимать старую писанину...

Старый 23.01.2011, 01:46
f.g.programmer вне форума Посмотреть профиль Отправить личное сообщение для f.g.programmer Найти все сообщения от f.g.programmer
  № 12  
Ответить с цитированием
f.g.programmer
 
Аватар для f.g.programmer

блогер
Регистрация: Sep 2010
Адрес: Россия
Сообщений: 137
Записей в блоге: 3
Цитата:
Где реально можно ошибиться, занулив коллбек случайно?
Код AS3:
if(_complete)
	_complete(result);
_complete=null;
==
Код AS3:
if(_complete)
	onLogin(result);
_complete=null;
==
Код AS3:
if(_complete)
	if (result.success) {
		continueProgram();
	}
	else {
		tryLogin();
	}
_complete=null;
==
Код AS3:
if(_complete)
	if (result.success) {
		continueProgram();
	}
	else {
		_connection.login(pair.usr, pair.pwd, onLogin);
	}
_complete=null;
внутри _connection.login делаем _complete=onLogin, и запускаем попытку залогиниться, и делаем _complete=null
когда приходит ответ от сервера он не знает куда ему деваться


Цитата:
Хотелось бы услышать мнение как профи, так и "профи".
Профи уже ответили
Цитата:
если событие не нужно, то оно не нужно
Я, как "профи" с ними согласен.

Старый 23.01.2011, 01:47
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 13  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Новосибирск :D
Сообщений: 6,597
Записей в блоге: 17
Не понимаю, почему люди тыкают в бмв и говорят, что оное хорошо... только автомобиль лучше.

А ещё расскажите, что делать в случае ошибок. Ещё 2 метода передавать?

Старый 23.01.2011, 01:54
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 14  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
А ещё расскажите, что делать в случае ошибок. Ещё 2 метода передавать?
Можно параметрами success какой-нить ;о))
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 23.01.2011, 01:55
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 15  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Новосибирск :D
Сообщений: 6,597
Записей в блоге: 17
@f.g.programmer, это очень обидно, что Вы думаете что я не вижу эту параллель.
Я Вам пытаюсь сказать, что если класс отработает больше, чем вызов одного метода то совершенно очевидно что нужно делать незануление коллбека. А если класс создан с целью один раз дёрнуть метод — вообще стоило бы это дело передавать в метод? Почему бы это дело не передать в конструктор или, ещё лучше, вообще в ввиде функции оформить?

Код:
if(_complete)
	if (result.success) {
		continueProgram();
	}
	else {
//передали коллбек
		_connection.login(pair.usr, pair.pwd, onLogin);
	}
//занулили какую-то хрень
_complete=null;
Честное слово, такие штуки высосаны из пальца. Если есть такой страх - пользуйте обсервер, наши клёвые эвенты. Я всегда за них.

P.S. я пьян, завтра могу передумать сильно

Старый 23.01.2011, 01:56
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 16  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Мне кажется тут идет разговор если ошибок быть не может. А если нужны парамы на ошибки ит .д. без КастомИвентов тут уже не обойтись, как я и сказал это приемлимо более менее в случае 1 использоваемого события

Старый 23.01.2011, 01:59
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 17  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Новосибирск :D
Сообщений: 6,597
Записей в блоге: 17
А по мне так стандартных хватит.

Старый 23.01.2011, 02:01
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 18  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
Мне кажется тут идет разговор если ошибок быть не может. А если нужны парамы на ошибки ит .д. без КастомИвентов тут уже не обойтись, как я и сказал это приемлимо более менее в случае 1 использоваемого события

_complete(result.success);

или

_complete("нет связи"|"все ок"|"нет такого файла");

Меня всегда напрягают альтернативы, когда можно сделать кучей способов и все они кажутся одинаковыми
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 23.01.2011, 02:03
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 19  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Новосибирск :D
Сообщений: 6,597
Записей в блоге: 17
@GBee, позвольте. Error Event и дёрганье метода с параметром это 2 совсем разные вещи.

Старый 23.01.2011, 02:09
f.g.programmer вне форума Посмотреть профиль Отправить личное сообщение для f.g.programmer Найти все сообщения от f.g.programmer
  № 20  
Ответить с цитированием
f.g.programmer
 
Аватар для f.g.programmer

блогер
Регистрация: Sep 2010
Адрес: Россия
Сообщений: 137
Записей в блоге: 3
Да, пожалуй пример не очень удачен, так как я его подгонял под данную ситуацию. У меня есть дурная привычка использовать обычные колбек-методы везде, где можно обойтись без событий. Поэтому я стараюсь избегать потенциально опасных мест, даже если их главная опасность - кривой код.


Последний раз редактировалось f.g.programmer; 23.01.2011 в 02:19.
Создать новую тему Ответ Часовой пояс GMT +4, время: 12:23.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:23.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.