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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.01.2012, 20:54
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 41  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
DnV, во флеше замыкания - зло.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 19.01.2012, 22:39
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 42  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от DnV Посмотреть сообщение
Для передачи именно текущего объекта можно использовать замыкание:
Код AS3:
loader.addEventListener(Event.COMPLETE, function(f){return function(e:Event):void{completeEvent(e, f)}}(file));
Сценарий использования - параллельная загрузка файлов с их последующим сохранением под своими именами.
Вместо этого, конечно, можно наследовать URLLoader и хранить каждый файл в экземпляре класса загрузчика.
Наглядный пример того, как делать не надо.

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

Регистрация: Apr 2007
Сообщений: 29
etc, значит можно заносить в FAQ, там кроме "зло" ничего вразумительного про замыкания нет А это, между прочим, самый простой способ. И так ли оно смертельно в данном случае? Если событие происходит крайне редко, мало того, для каждого экземпляра загрузчика единожды, чего ради городить свои классы?

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
DnV, каждый раз при вызове такого метода (вы кстати путаете класс и метод) создается новый экземпляр объекта, который не удаляется (где-то на форуме было). К тому же это крайне не удобно в отладке и разработке. Да и что мешает создать нормальный обработчик?
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

Регистрация: Apr 2007
Сообщений: 29
TanaTiX, классы и методы я не путаю, нет За ссылку к обсуждению на форуме этой проблемы буду благодарен.

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Тут обсуждалось.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

Регистрация: Apr 2007
Сообщений: 29
TanaTiX, спасибо. Поведение, о котором пишет BlooDHounD всё же предсказуемо. Да, сложнее дебажить. По поводу памяти, я не знаю как именно работает getSize, но даже если вложенная функция весит на пол килобайта больше, в ряде случаев это не важно. Сравнивать их тоже обычно не приходится. В общем, достаточно просто учитывать эти особенности и можно смело пользоваться. В ряде случаев (включая мой пример) проблем не будет.

Старый 20.01.2012, 13:30
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 48  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Мне на вопрос "Дык иногда же очень удобно использовать анонимные функции" тимлид рассказал как он снизил потребление памяти в проекте с 800 до 200 MB повыпилив от туда анонимки.

Функция то сама может и не много весит - несколько килобайт, только вот она может захватить контекст, весящий десятки метров (например, если вы баловались внутри BitmapData-ми, а потом повесили ее как обработчик, да так она там и провисела пока флешплеер не закрыли)


Последний раз редактировалось expl; 20.01.2012 в 13:34.
Старый 20.01.2012, 13:50
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 49  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от DnV Посмотреть сообщение
общем, достаточно просто учитывать эти особенности и можно смело пользоваться. В ряде случаев (включая мой пример) проблем не будет.
Очередная медвежья услуга. Проблема не в том, что нужно учитывать особенности, а в том, что очередной новичек проигнорирует это предупреждение, так как их просто не понимает и начнет городить огород. И в результате мы получим еще одного быдло-кодера, потому что привыкнет писать абы как, а не сразу нормально.

В общем, достаточно просто учитывать, что анонимы создают проблемы и не использовать их. Вообще не использовать. Забыть и все.
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 20.01.2012 в 13:55.
Старый 21.01.2012, 16:13
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 50  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Давайте внесем немного ясности: замыкание - это не зло, уже хотябы потому, что оно неизбежно случается с любой функцией Замыканием называют лексическое окружение конкретного экземпляра функции. Так, например у функции f из примера ниже замыкание содержит связанные переменные y и z, и свободную переменную x, группа переменных {x, y, z} называется замыканием. В некоторых, очень часто встречающихся в AS3 ситуациях в заыкание неявно добавляются еще 2 переменные - this и super.
Код AS3:
var x:int;
function f(z:int):int
{
	var y:int = 42;
	return y + x + z;
}
Замыкание - это теоретическая концепция, она не обязана быть явно выражена в коде (в реализации того или другого языка), но, как только в языке программирования есть функции, имеет смысл говорить о замыканиях.
Теперь по-сути вопроса: использование анонимной функции в качестве слушателя. В AS3 - это плохая практика по причине плохой реализации анонимных функций и контекстных привязок для них. В чем это выражается: сначала о привязках, привязка в лексической среде подразумевает связывание значения с именем. Так, в примере выше значение 42 связано с именем y. Пока вы оперирует константами (числа - константы), то разницу вы не увидите, но, как только вы столкнетесь с необходимостью лексически связать сложную структуру с именем, у вас возникнут две принципиально разные возможности это сделать. Вы можете создавать структуру каждый раз как функция выполняется, а можете создать ее всего один раз. Последнее имеет смысл для функций, т.как типично, вы не захотите создавать одну и ту же функцию много раз. К сожалению, в AS3 нет возможности управлять типом связывания, и все связывания делаются динамически - это значит, что функция объявленная внутри другой функции всегда будет создана повторно, при повторном вызове внешней функции. Это, во-первых, естесственно, нееффективно (т.как вы создаете абсолютно никому не нужную копию, при том, что вполне могли бы использовать уже существующую), чревато, т.как даже если вам не нужно сравнивать функции, EventDispatcher это делает каждый раз, когда диспатчит событие и значительная часть его логики завязана на сравнении функций.
Из практических соображений, нет никаких преимуществ в использовании вложенных функций, но, как уже было сказано, неудобства при отладке, да и просто форматирование кода... вобщем, кругом одни недостатки и никаких достоинств. Вот, поэтому, вложенными функциями и не пользуются.
__________________
Hell is the possibility of sanity

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

Теги
anonimous function , вложенность

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

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


 


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


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