Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вопос о правильности написания функции (http://www.flasher.ru/forum/showthread.php?t=210083)

djken 24.01.2015 16:01

Вопос о правильности написания функции
 
Здравствуйте.
Часто возникает вопрос как правильнее будет... Стоит ли функцию urlLoader_complete выносить как отдельный метод класса? Или лучше оставлять как функцию внутри метода loaderXml ?

Т.е. так ?
Код AS3:

private function loaderXml(e:Event):void {
                        var xml:XML;
                        var urlRequest:URLRequest = new URLRequest("file.xml");
                        var urlLoader:URLLoader = new URLLoader();
                        urlLoader.addEventListener(Event.COMPLETE, urlLoader_complete);
                        urlLoader.load(urlRequest);
 
                        function urlLoader_complete(e:Event):void {
                                xml = new XML(e.currentTarget.data);
                                trace(xml);
                        }
                }

Или так?

Код AS3:

private var xml:XML;
 
private function loaderXml(e:Event):void {
        var urlRequest:URLRequest = new URLRequest("file.xml");
        var urlLoader:URLLoader = new URLLoader();
        urlLoader.addEventListener(Event.COMPLETE, urlLoader_complete);
        urlLoader.load(urlRequest);
}
 
private function urlLoader_complete(e:Event):void {
        xml = new XML(e.currentTarget.data);
        trace(xml);
}


udaaff 24.01.2015 16:16

Или так.

undefined 24.01.2015 16:18

Имхо лучше отдельным методом. т.к. в будущем может потребоваться повторить выполнение всей логики после загрузки без самой загрузки.Тогда просто вызываешь метод окончания загрузки и скармливаешь ему ранее загруженные данные.Такая ситуация может быть, например, в играх когда юзер нажал рестарт.

ZackMercury 24.01.2015 16:38

Не знаю почему, но все вокруг говорят, что функция в функции - ужасно плохо. Да и не смотрится.
Мне только не нравится момент, как у вас метод называется. Существительное)

expl 24.01.2015 17:02

Дело тут не в "плохо/хорошо", "потребуется повторить выполнение логики/не потребуется",
а в том, что внутренние функции - это то же самое, что анонимные.

Это очень плохо для производительности - вот и всё

caseyryan 24.01.2015 18:30

Цитата:

Это очень плохо для производительности - вот и всё
Почему? Как это влияет на производительность?

п.с. Я лично делаю анонимные функции только для колбэков. Но по-моему, это лишь дело вкуса. За исключением описанного в 3 посте

Inet_PC 24.01.2015 22:43

Цитата:

Почему? Как это влияет на производительность?
Основные минусы перечислены тут.

nubideus 25.01.2015 01:12

не уметь программировать вообще очень плохо для производительности, вот и все.

у анонимной функции в плане скорости проблема только в том, что механизм замыканий требует пересоздавать функцию каждый раз.

например
Код AS3:

while(expression){
  (function(..){..})()
}

функция будет создаваться каждый раз.

имхо все равно что жаловаться на то, что new <Object>[{},....] каждый раз создает новый вектор.

код
Код AS3:

vector.map(function(element:Objec, index:uint, vec:Vector.<Object>):Object{
  return {};
});

работает не медленнее, чем если бы с методом. хотя в любом случае inline map может работать до 20 раз быстрее, чем какие то методы

in4core 25.01.2015 02:04

Цитата:

Не знаю почему, но все вокруг говорят, что функция в функции - ужасно плохо. Да и не смотрится.
Так не с балды же говорят. GC - всему виной :) прочитайте про него и все станет понятно.
По сути - ничего плохого нет. Пишите если надо - но в highLoad приложениях - вы сразу почуствуете разницу. С другой стороны - пока вы не пишите ничего такого, то вам и знать не положено, плохо или хорошо, а когда начнете - скорее всего такой вопрос у вас просто не зародится

expl 25.01.2015 13:41

Цитата:

не уметь программировать вообще очень плохо для производительности, вот и все.
Не уметь писать без анонимных функций плохо, да, согласен


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

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