Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Подпрограммы (http://www.flasher.ru/forum/showthread.php?t=113003)

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 (Сообщение 745812)
внутри метода класса описывать вспомогательные подпрограммы?

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

Ruffus 16.06.2008 21:49

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

iNils 16.06.2008 22:10

Цитата:

Сообщение от Ruffus (Сообщение 745918)
Это значит, что вложенные функции не приемлемы в принципе?

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

Ruffus 17.06.2008 02:07

Хорошо

chingachgoog 17.06.2008 15:16

Цитата:

Сообщение от Ruffus (Сообщение 745918)
Это значит, что вложенные функции не приемлемы в принципе?

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

iNils 17.06.2008 17:53

Цитата:

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

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

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

Цитата:

Сообщение от iNils (Сообщение 746084)
Локальный переменные более быстрые и код выглядит читабильнее.

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

Цитата:

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

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

Цитата:

Сообщение от iNils (Сообщение 746084)
зато у каждого объекта по копии данной функции в памяти.

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

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

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

iNils 17.06.2008 20:22

Цитата:

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

Цитата:

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

Цитата:

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

Цитата:

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

Цитата:

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

chingachgoog 17.06.2008 20:46

Цитата:

Сообщение от iNils (Сообщение 746088)
Цитата:

Сообщение от chingachgoog
Зачем обязательно внутренней функции видеть свойства и методы класса?

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

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

Цитата:

Сообщение от iNils (Сообщение 746088)
Цитата:

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

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

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

Цитата:

Сообщение от iNils (Сообщение 746088)
Цитата:

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

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

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

Цитата:

Сообщение от iNils (Сообщение 746088)
Цитата:

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

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

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

Цитата:

Сообщение от iNils (Сообщение 746088)
Это говорит об уровне, см. выше про хорошего программиста.

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

iNils 17.06.2008 20:52

Цитата:

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

Так речь идет об AS1? Там можно, что угодно творить, поэтому спорить дальше бесполезно.
Цитата:

Об уровне говорит результат. :)
Беспорно, но два программиста с разным уровнем способны достичь одинакового результата, но за разное время.

chingachgoog 17.06.2008 21:49

Цитата:

Сообщение от iNils (Сообщение 746095)
Так речь идет об AS1? Там можно, что угодно творить.

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

etc 18.06.2008 01:00

Цитата:

Сообщение от chingachgoog (Сообщение 746099)
И это здорово!

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

chingachgoog 18.06.2008 13:41

Цитата:

Сообщение от __etc (Сообщение 746147)
Ага, можно творить что угодно, но только ничего вразумительного.

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


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

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