Просмотр полной версии : Подпрограммы
Вопрос такой.
Flash умеет воспринимать сложенность функций? Можно ли, скажем,
внутри метода класса описывать вспомогательные подпрограммы?
А то делаю, и что-то не работает никак.
chingachgoog
16.06.2008, 14:23
А что не работает-то?
Класс - та же функция. Метод класса - функция в функции по сути.
А функция - это подпрограмма и есть. И можно внутри функции сколько угодно (почти :) ) раз вложенных функций вызывать.
Пользуясь трассировкой, я увидел, что у меня из этих подпрограмм не вызываются методы класса. Обратной, так сказать, связи нет.
Видимо, окружение сменилось.
внутри метода класса описывать вспомогательные подпрограммы?Можно, но так никогда не делайте. Время их жизни, это время выполнения метода. И при каждом вызове метода, они будет заново создаваться. А это плохо.
Это значит, что вложенные функции не приемлемы в принципе?
Это значит, что вложенные функции не приемлемы в принципе?Я знаю только единственный случай, когда без вложенной функции не обойтись, это в классе Delegate. Во других случаях используйте приватные метода.
chingachgoog
17.06.2008, 15:16
Это значит, что вложенные функции не приемлемы в принципе?
Почему? Очень даже приемлемы.
Это используется в ООП или при инициализации событий.
(вложенная функция не является методом функции-оболочки)
Это используется в ООП или при инициализации событий.
(вложенная функция не является методом функции-оболочки)Он говоорит об описании тела функции внутри метода, а не об создании ссылки для обработчика событий.
chingachgoog
17.06.2008, 18:48
И что плохого в описании тела функции внутри метода (внутри функции-оболочки)?
Просто надо будет понимать, что происходит: внутренняя функция станет уникальным методом объекта активации функции-оболочки.
Вы же создаете локальные переменные внутри функции? Так они точно также принадлежат объекту активации. И никто не париться, что их не надо использовать и что они существуют лишь на время жизни объекта активации :)
А что хорошого?
Зачем ее создавать внутри?
Зачем нужна уникальность и что в ней уникального?
И расшифуй мне значение тирады "объекта активации функции-оболочки"
chingachgoog
17.06.2008, 19:14
А зачем создавать внутри локальные переменные? Плохо это или хорошо?
Это некорректный вопрос. Если нужно - то создаем. И тогда хорошо.
A.prop="функция А"
function A(){ // функция-оболочка
var per=null // переменная объекта активации функции-оболочки
var external=arguments.callee // функция А как объект
B()
function B(){ // внутренняя функция
trace(this) // this - указывает на объект активации функции-оболочки
trace(this.per)
trace(this==external) // объект активации не то же самое, что функция как объект
trace(external.prop) // свойство функции как объекта
}
}
A()
Локальный переменные более быстрые и код выглядит читабильнее.
А вложенные функции не могу достучаться ни до свойств, ни до методов класса, только до локальных переменных в методе, в котором были определены и какой от этого практический смысл? Таже подписка на события, ну создали мы обработчки загрузки, функциональность у него низкая, зато у каждого объекта по копии данной функции в памяти.
На твои вопрос я ответил, а теперь ответь на мои в 11 посту.
chingachgoog
17.06.2008, 20:06
Локальный переменные более быстрые и код выглядит читабильнее.
Почему локальные переменные более быстрые? Наверное потому, что цепочка видимости сразу с них начинается и не надо ее всю проходить. Так? Тогда и локальные (внутренние) функции тоже более быстрые.
А вложенные функции не могу достучаться ни до свойств, ни до методов класса, только до локальных переменных в методе, в котором были определены и какой от этого практический смысл?
Почему молотком нельзя красить забор? Потомучто он для другого сделан.
Зачем обязательно внутренней функции видеть свойства и методы класса? (кстати если очень хочется, то можно и достучаться)
зато у каждого объекта по копии данной функции в памяти.
Что значит по копии функции в памяти? Будет копия функции как объекта? Да. Если мы СОЗДАЕМ ОБЪЕКТ через new (функция оболочки будет классом). И прописываем в этот объект внутреннюю функцию.
Но ведь и внутренняя функция может быть классом. Тогда хорошо, что она уникальная - можно использовать ее свойства как статические для класса.
Вообщем это дело широты фантазии программиста, как использовать внутренние функции.
Зачем обязательно внутренней функции видеть свойства и методы класса?А зачем она нужна вообще? Функции нужны когда один и тот же код используется неоднократно из разных мест.
Что значит по копии функции в памяти? Будет копия функции как объекта? Да. Если мы СОЗДАЕМ ОБЪЕКТ через new (функция оболочки будет классом). И прописываем в этот объект внутреннюю функцию.Нет, будет сам объект + локальная функция. Если создадим 100 объектов, будет еще и 100 локальный функций, когда как метод класса будет всегда один.
Но ведь и внутренняя функция может быть классом.Прощай автокоплит, здраствуй AS1. Хороший программист создаст новый класс, а кашу.
Тогда хорошо, что она уникальная - можно использовать ее свойства как статические для класса.Какие статический свойства, когда время ее жизни стремится к нулю.
Вообщем это дело широты фантазии программистаЭто говорит об уровне, см. выше про хорошего программиста.
chingachgoog
17.06.2008, 20:46
Зачем обязательно внутренней функции видеть свойства и методы класса?
А зачем она нужна вообще? Функции нужны когда один и тот же код используется неоднократно из разных мест.
Ну так она и будет использоваться неоднократно. А что из разных мест - это уже натяжка. Не всегда это надо.
Что значит по копии функции в памяти? Будет копия функции как объекта? Да. Если мы СОЗДАЕМ ОБЪЕКТ через new (функция оболочки будет классом). И прописываем в этот объект внутреннюю функцию.
Нет, будет сам объект + локальная функция. Если создадим 100 объектов, будет еще и 100 локальный функций, когда как метод класса будет всегда один.
Так я про это и говорю. Будет объект созданный через new и внутри него будет функция как объект (вместо ссылки на функцию, не будь она локальной).
А метод класса один, потомучто он в прототипе. Но так это не всегда и надо.
Но ведь и внутренняя функция может быть классом.
Прощай автокоплит, здраствуй AS1. Хороший программист создаст новый класс, а кашу.
А как раздел форума называется? AS1/AS2.
Программист пишущий на AS1 не есть синоним "плохой программист", ровно как и наоборот для AS2/3
А сложный код вполне можно принять за кашу.
Тогда хорошо, что она уникальная - можно использовать ее свойства как статические для класса.
Какие статический свойства, когда время ее жизни стремится к нулю.
Посмотрите пост 12. Вы путаете функцию как объект (никуда время его жизни не стремиться) и объект активации функции (действительно короткоживущий). Так вот в объекты созданные через new прописывается функция как объект. Соответственно этот объект имеет свои методы и свойства (то, что в синтаксисе AS2 называется статическими методами и свойствами).
Это говорит об уровне, см. выше про хорошего программиста.
Об уровне говорит результат. :)
А как раздел форума называется? AS1/AS2. Программист пишущий на AS1 не есть синоним "плохой программист"Так речь идет об AS1? Там можно, что угодно творить, поэтому спорить дальше бесполезно.
Об уровне говорит результат. :)Беспорно, но два программиста с разным уровнем способны достичь одинакового результата, но за разное время.
chingachgoog
17.06.2008, 21:49
Так речь идет об AS1? Там можно, что угодно творить.
И это здорово!
И это здорово!
Ага, можно творить что угодно, но только ничего вразумительного.
chingachgoog
18.06.2008, 13:41
Ага, можно творить что угодно, но только ничего вразумительного.
Зависит от разума, но никак не от версии AS.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.