PDA

Просмотр полной версии : Подпрограммы


Ruffus
16.06.2008, 14:13
Вопрос такой.
Flash умеет воспринимать сложенность функций? Можно ли, скажем,
внутри метода класса описывать вспомогательные подпрограммы?
А то делаю, и что-то не работает никак.

chingachgoog
16.06.2008, 14:23
А что не работает-то?
Класс - та же функция. Метод класса - функция в функции по сути.
А функция - это подпрограмма и есть. И можно внутри функции сколько угодно (почти :) ) раз вложенных функций вызывать.

Ruffus
16.06.2008, 15:24
Пользуясь трассировкой, я увидел, что у меня из этих подпрограмм не вызываются методы класса. Обратной, так сказать, связи нет.
Видимо, окружение сменилось.

iNils
16.06.2008, 15:29
внутри метода класса описывать вспомогательные подпрограммы?Можно, но так никогда не делайте. Время их жизни, это время выполнения метода. И при каждом вызове метода, они будет заново создаваться. А это плохо.

Ruffus
16.06.2008, 21:49
Это значит, что вложенные функции не приемлемы в принципе?

iNils
16.06.2008, 22:10
Это значит, что вложенные функции не приемлемы в принципе?Я знаю только единственный случай, когда без вложенной функции не обойтись, это в классе Delegate. Во других случаях используйте приватные метода.

Ruffus
17.06.2008, 02:07
Хорошо

chingachgoog
17.06.2008, 15:16
Это значит, что вложенные функции не приемлемы в принципе?


Почему? Очень даже приемлемы.
Это используется в ООП или при инициализации событий.
(вложенная функция не является методом функции-оболочки)

iNils
17.06.2008, 17:53
Это используется в ООП или при инициализации событий.
(вложенная функция не является методом функции-оболочки)Он говоорит об описании тела функции внутри метода, а не об создании ссылки для обработчика событий.

chingachgoog
17.06.2008, 18:48
И что плохого в описании тела функции внутри метода (внутри функции-оболочки)?
Просто надо будет понимать, что происходит: внутренняя функция станет уникальным методом объекта активации функции-оболочки.
Вы же создаете локальные переменные внутри функции? Так они точно также принадлежат объекту активации. И никто не париться, что их не надо использовать и что они существуют лишь на время жизни объекта активации :)

iNils
17.06.2008, 19:04
А что хорошого?
Зачем ее создавать внутри?
Зачем нужна уникальность и что в ней уникального?
И расшифуй мне значение тирады "объекта активации функции-оболочки"

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()

iNils
17.06.2008, 19:32
Локальный переменные более быстрые и код выглядит читабильнее.
А вложенные функции не могу достучаться ни до свойств, ни до методов класса, только до локальных переменных в методе, в котором были определены и какой от этого практический смысл? Таже подписка на события, ну создали мы обработчки загрузки, функциональность у него низкая, зато у каждого объекта по копии данной функции в памяти.

На твои вопрос я ответил, а теперь ответь на мои в 11 посту.

chingachgoog
17.06.2008, 20:06
Локальный переменные более быстрые и код выглядит читабильнее.


Почему локальные переменные более быстрые? Наверное потому, что цепочка видимости сразу с них начинается и не надо ее всю проходить. Так? Тогда и локальные (внутренние) функции тоже более быстрые.


А вложенные функции не могу достучаться ни до свойств, ни до методов класса, только до локальных переменных в методе, в котором были определены и какой от этого практический смысл?


Почему молотком нельзя красить забор? Потомучто он для другого сделан.
Зачем обязательно внутренней функции видеть свойства и методы класса? (кстати если очень хочется, то можно и достучаться)


зато у каждого объекта по копии данной функции в памяти.


Что значит по копии функции в памяти? Будет копия функции как объекта? Да. Если мы СОЗДАЕМ ОБЪЕКТ через new (функция оболочки будет классом). И прописываем в этот объект внутреннюю функцию.

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

Вообщем это дело широты фантазии программиста, как использовать внутренние функции.

iNils
17.06.2008, 20:22
Зачем обязательно внутренней функции видеть свойства и методы класса?А зачем она нужна вообще? Функции нужны когда один и тот же код используется неоднократно из разных мест.

Что значит по копии функции в памяти? Будет копия функции как объекта? Да. Если мы СОЗДАЕМ ОБЪЕКТ через new (функция оболочки будет классом). И прописываем в этот объект внутреннюю функцию.Нет, будет сам объект + локальная функция. Если создадим 100 объектов, будет еще и 100 локальный функций, когда как метод класса будет всегда один.

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

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

Вообщем это дело широты фантазии программистаЭто говорит об уровне, см. выше про хорошего программиста.

chingachgoog
17.06.2008, 20:46
Зачем обязательно внутренней функции видеть свойства и методы класса?

А зачем она нужна вообще? Функции нужны когда один и тот же код используется неоднократно из разных мест.

Ну так она и будет использоваться неоднократно. А что из разных мест - это уже натяжка. Не всегда это надо.



Что значит по копии функции в памяти? Будет копия функции как объекта? Да. Если мы СОЗДАЕМ ОБЪЕКТ через new (функция оболочки будет классом). И прописываем в этот объект внутреннюю функцию.

Нет, будет сам объект + локальная функция. Если создадим 100 объектов, будет еще и 100 локальный функций, когда как метод класса будет всегда один.

Так я про это и говорю. Будет объект созданный через new и внутри него будет функция как объект (вместо ссылки на функцию, не будь она локальной).
А метод класса один, потомучто он в прототипе. Но так это не всегда и надо.



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

Прощай автокоплит, здраствуй AS1. Хороший программист создаст новый класс, а кашу.


А как раздел форума называется? AS1/AS2.
Программист пишущий на AS1 не есть синоним "плохой программист", ровно как и наоборот для AS2/3
А сложный код вполне можно принять за кашу.



Тогда хорошо, что она уникальная - можно использовать ее свойства как статические для класса.

Какие статический свойства, когда время ее жизни стремится к нулю.


Посмотрите пост 12. Вы путаете функцию как объект (никуда время его жизни не стремиться) и объект активации функции (действительно короткоживущий). Так вот в объекты созданные через new прописывается функция как объект. Соответственно этот объект имеет свои методы и свойства (то, что в синтаксисе AS2 называется статическими методами и свойствами).


Это говорит об уровне, см. выше про хорошего программиста.


Об уровне говорит результат. :)

iNils
17.06.2008, 20:52
А как раздел форума называется? AS1/AS2. Программист пишущий на AS1 не есть синоним "плохой программист"Так речь идет об AS1? Там можно, что угодно творить, поэтому спорить дальше бесполезно.
Об уровне говорит результат. :)Беспорно, но два программиста с разным уровнем способны достичь одинакового результата, но за разное время.

chingachgoog
17.06.2008, 21:49
Так речь идет об AS1? Там можно, что угодно творить.

И это здорово!

etc
18.06.2008, 01:00
И это здорово!

Ага, можно творить что угодно, но только ничего вразумительного.

chingachgoog
18.06.2008, 13:41
Ага, можно творить что угодно, но только ничего вразумительного.


Зависит от разума, но никак не от версии AS.