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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.01.2011, 02:12
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 21  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Psycho Tiger, а причем тут ерроревент? Я думал мы говорим о ситуации, когда объект А говорит объекту Б слазить на сервак и после обработки результата рассказать о нем через колбек, либо событием.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

блогер
Регистрация: Jun 2005
Адрес: Новосибирск :D
Сообщений: 6,597
Записей в блоге: 17
Цитата:
Сообщение от GBee Посмотреть сообщение
Psycho Tiger, а причем тут ерроревент? Я думал мы говорим о ситуации, когда объект А говорит объекту Б слазить на сервак и после обработки результата рассказать о нем через колбек, либо событием.
Я про это:
Цитата:
Меня всегда напрягают альтернативы, когда можно сделать кучей способов и все они кажутся одинаковыми
ЕррорЕвент и передача метода это альтернативы, но они совершенно разные.

На самом деле я скажу так: передача метода прямым текстом почти всегда хуже, чем событие. Почти всегда — это скорее всего относится к случаям, когда Вы задумываетесь.
Я вижу 1 причину: скорость в особо-критичных-местах. Но ёлки-палки, какие особо критичные места в колл-беке? ENTER_FRAME? Дак он нативно рассылается.
Ещё что-то вроде GoF Command/транзакций можно сюда приплести. Только там не очень коллбек, имо.

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

блогер
Регистрация: Jan 2008
Адрес: Донецк
Сообщений: 162
Записей в блоге: 2
Отправить сообщение для JackFromChaos с помощью Skype™
2PsychoTiger: А мне вот наоборот, в большинстве случаев неудобно пользоваться эвентами...
По крайней мере в тех случаях, когда мне надо:
Добавить строчку подписи на эвенте
Запустить команду
В обработчике отписаться.

Т.е. это +2 строки, + я не могу нормально воспользоваться анонимной функцией...
__________________
Искренне Ваш, Джек.

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

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

Вызов метода подразумевает жесткую связь между вызывающим классом и классом, в котором оное вызывается, что само по себе не айс.
Конечно, в addEventListener мы передаем тот же метод, но связь жесткой я уже не назову, т.к. это обыгрывается нативно и по сути классы ничего не связывает.

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

блогер
Регистрация: Jan 2008
Адрес: Донецк
Сообщений: 162
Записей в блоге: 2
Отправить сообщение для JackFromChaos с помощью Skype™
Во первых не вижу абсолютно никакой разницы в разнице связности...
Так же не вижу ничего зазорного в использовании анонимных функций, иногда это очень удобно...

Добавлено через 8 минут
Пример который я приводил в самом начале, с connected...
На самом деле это был просто пример, а в реальности вызова у меня выглядят так:
Код AS3:
connection.call( "login" ,onLogin,usr,pwd);
Ошибка конекта с сервером естественно будет обрабатывать вовсье не здесь, а глобально для connetcion, естественно через событие...
А конкретно обработчик onLogin должен получить только ОК, либо ошибку связанную с паролем, и обработать ее в соответствующем месте.
Применять тут события нет никакого смысла. Это только усложнит код и его читабельность.
__________________
Искренне Ваш, Джек.


Последний раз редактировалось JackFromChaos; 24.01.2011 в 04:03.
Старый 24.01.2011, 13:53
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 26  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Новосибирск :D
Сообщений: 6,597
Записей в блоге: 17
Цитата:
Так же не вижу ничего зазорного в использовании анонимных функций, иногда это очень удобно...
Поищите пост Блуда о том, чем они плохи. Например они съедают в 20 раз больше памяти.
Цитата:
Ошибка конекта с сервером естественно будет обрабатывать вовсье не здесь, а глобально для connetcion, естественно через событие...
Вот и получается в коде мешанина. Где-то через событие, где то метод дёргаем.
Может если Вы один работаете над проектом это допустимо. Но в случае командной разработки может быть совсем неочевидно, почему половина сделана так, половина так.

Цитата:
А конкретно обработчик onLogin должен получить только ОК, либо ошибку связанную с паролем, и обработать ее в соответствующем месте.
То есть Вы даже гипотетически не допускаете того, что событие ON_LOGIN может понадобится не в одной месте?

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

блогер
Регистрация: Jan 2008
Адрес: Донецк
Сообщений: 162
Записей в блоге: 2
Отправить сообщение для JackFromChaos с помощью Skype™
В большинстве случаев, когда появляется необходимость создать анонимную функцию, альтернативой является написание дополнительного класса. А это:
1) Увеличение сложности восприятия кода
2) Дополнительные 10-20 строк, и новый класс
3) Вряд ли тут получится сильно сэкономить память...

Впрочем, не вижу смысла в этом споре... Уверен, что каждый останется при своем мнении...
__________________
Искренне Ваш, Джек.

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

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

Старый 24.01.2011, 15:24
JackFromChaos вне форума Посмотреть профиль Отправить личное сообщение для JackFromChaos Найти все сообщения от JackFromChaos
  № 29  
Ответить с цитированием
JackFromChaos
 
Аватар для JackFromChaos

блогер
Регистрация: Jan 2008
Адрес: Донецк
Сообщений: 162
Записей в блоге: 2
Отправить сообщение для JackFromChaos с помощью Skype™
Сходу в голову ничего не приходит, но как академический пример:
Код AS3:
for (var i:int = numChildren - 1; i >= 0; i--)
{
	var displayObject:DisplayObject = getChildAt(i);
	setTimeout(i * 100, function():void 
	{ 
		displayObject.visible = false 
	} );
}
Хотя, конечно в данном случае лучше написать так:
Код AS3:
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, то нам бы пришлось, вероятно, делать что-то типа:
Код AS3:
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.
Старый 24.01.2011, 15:40
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 30  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Новосибирск :D
Сообщений: 6,597
Записей в блоге: 17
Цитата:
Если предположить, что в нашем распоряжении нет в setTimeout параметра arguments, то нам бы пришлось, вероятно, делать что-то типа:
Но ведь он есть!
Давайте половину API выкинем ради того, чтобы показать, что анонимные функции "удобные".

Создать новую тему Ответ Часовой пояс GMT +4, время: 05:56.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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