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

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

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

блогер
Регистрация: Jan 2008
Адрес: Донецк
Сообщений: 162
Записей в блоге: 2
Отправить сообщение для JackFromChaos с помощью Skype™
Цитата:
Сообщение от i.o. Посмотреть сообщение
Имеем:
Код AS3:
if (_onClose != null)
{
	var f:Function = _onClose;
	_onClose = null;
	f();
}
А теперь то же с нужного ракурса:
Код AS3:
if( _onClose != null )
    _onClose();
_onClose = null;
Нет, не согласен. Внутри функции _onClose может быть повторное открытие окна и новая инициализация _onClose. А мы взяли, и обнулили...
__________________
Искренне Ваш, Джек.

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

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Цитата:
Сообщение от JackFromChaos Посмотреть сообщение
Нет, не согласен. Внутри функции _onClose может быть повторное открытие окна и новая инициализация _onClose. А мы взяли, и обнулили...
Шобытие?)

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

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

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

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Вот Вам пища для размышлений:
Главное окно при открытии попапа блочится, менеджер окон, которые эти окна открывает добавляет окна в очередь - закрыл одно, открыл другое, а игра ставится вовсе на паузу когда всплывает такое окошко.

Уже 3 элемента нуждаются в событии от окон. Конечно, можно заставить событие слать менеджер окон, или ещё лучше - окно дёргает метод менеджера окон, тот дёргает метод логики игры, а тот дёргает метод блокировки экрана... но помилуйте.
В командной разработке я бы за такое вставил:
Код AS3:
if (_onClose != null) //1. компилятор не скомпилирует, нет () - warning.
//2. само по себе сравнение на null слегка ущербно
{
	var f:Function = _onClose; //большая ясность финта
	_onClose = null;
	f();
}
Если так хочется не создавать эвенты - есть слот-сигнал.

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

блогер
Регистрация: Jan 2008
Адрес: Донецк
Сообщений: 162
Записей в блоге: 2
Отправить сообщение для JackFromChaos с помощью Skype™
2Psycho Tiger:
Код AS3:
if (_onClose != null)
- скомпилится прекрасно, и никаких варнингов не будет.
Код AS3:
if (_onClos)
- а вот так, не скомпилится...
Кстати, оффтоп. В c# нельзя написать
Код AS3:
if(object)
вместо
Код AS3:
if(object!=null)
...
Но, если вы обратите внимание, сравнение с null было сделано только в одном месте, там где сравнивался указатель на функцию...

Менеджеров окон на AS3 пока не писал, не было потребности... Вероятно если бы был, реализация была иной, не спорю...

Честно, не знаю, что есть slot signal, но в данном случае событие не возможно, потому что не на что подписываться. Конечный потребитель не имеет указателя на MsgBox. Пример слабой связности...
__________________
Искренне Ваш, Джек.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
//1. компилятор не скомпилирует, нет () - warning.//2. само по себе сравнение на null слегка ущербно
В данном случае warning не будет, наоборот если написать:
Код AS3:
if (_onClose)
Будет предупреждение. Насчет сравнения, это наиболее корректный вариант проверить существование ссылки на функцию.
По поводу финта полностью согласен
Вообще за шесть страниц непонятно чего, так и не увидел ниодного аргумента в пользу callback'ов. Единственный аргумент: "можно написать в одну строчку". На этом обсуждение можно было и закончить.

Добавлено через 3 минуты
Цитата:
Сообщение от JackFromChaos Посмотреть сообщение
Код AS3:
if (_onClos)
- а вот так, не скомпилится...
Кстати, оффтоп. В c# нельзя написать
Код AS3:
if(object)
вместо
Код AS3:
if(object!=null)
...
Но, если вы обратите внимание, сравнение с null было сделано только в одном месте, там где сравнивался указатель на функцию...
Скомпилируется в любом случае, warning не ошибка.

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
JackFromChaos, у меня совершенно идиотский вопрос.
Что такого делает Ваш навороченный вариант, чего не делает вот этот тупой как пробка?

Код AS3:
package classes.userInterface 
{
	import flash.display.*;
	import flash.events.*;
 
	public class Alert extends Sprite
	{
		private static var popupContainer:Sprite;
		private var alertMC:AlertMC;
 
		public static function init(pContainer:Sprite) : void
		{
			popupContainer = pContainer;
		}
 
		public function Alert(text:String) 
		{
			if (popupContainer) 	
			{
				alertMC = new AlertMC();
				alertMC.alertText.text = text;		
				alertMC.addEventListener(MouseEvent.CLICK, closeAlert);
				addChild(alertMC);
				popupContainer.addChild(this);
			}	
		}
 
		public function closeAlert(e:MouseEvent=null) : void
		{
			alertMC.removeEventListener(MouseEvent.CLICK, closeAlert);
			popupContainer.removeChild(this);
		}
 
	}
 
}

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

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

Но спор действительно не конструктивен, а потому предлагаю эту тему закрыть...

Добавлено через 3 минуты
[quote=mikhailk;967735]JackFromChaos, у меня совершенно идиотский вопрос.
Что такого делает Ваш навороченный вариант, чего не делает вот этот тупой как пробка?

1) Возможностью создать множество экземпляров... Есть реальный ситуации, где это не нужно, зачем засорять память лишним? Конкретно для MsgBox не так важно...
2) Разница связности классов...
3) Степени абстрагировании от реализации MsgBox... и инкапсуляции...
__________________
Искренне Ваш, Джек.


Последний раз редактировалось JackFromChaos; 25.01.2011 в 13:31.
Старый 25.01.2011, 13:39
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 59  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Конечный потребитель не имеет указателя на MsgBox. Пример слабой связности...
MsgBox - синглтон, это раз. А даже если бы им и не был, то судя по вашей реализации, его все равно через статичный метод пришлось бы показывать. Следовательно о существовании класса MsgBox, как ни крути, конечный пользователь все же знает. Следовательно слабая связанность в примере отсутствует.
PS: с занулением колбака внутри MsgBox все же соглашусь. Просто, просмотрев весь класс, не покидает чувство что "как-то все криво", не сочти за оскорбление.

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

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
etc недавно дал пример сравнения на функцию.
Код AS3:
if (!(func is Function))
По мне вот это корректней.

Цитата:
Честно, не знаю, что есть slot signal
В блоге у wxvxw посмотрите. Примерно те же события, но без объекта события. Ну и бегают быстрее.

Цитата:
Скомпилируется в любом случае, warning не ошибка.
Ну акей, но мы все поняли о чем идёт речь)

Цитата:
2) Разница связности классов...
В случае события всегда ожидается один параметр, это нативно и все это знают.
В случае метода коллбеку передается хрен-знает-что, поэтому о связанности говорить вообще не стоит.

Но я уже повторяюсь, да.

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

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

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


 


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


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