![]() |
Функции в Object
Нашёл в исходнике чата для вконтакта нечто подобное
Код AS3:
|
Пожалуйста, можно и так:
Код AS3:
Код AS3:
|
При встрече с автором сего шедевра сделайте ему что-нибудь нехорошее, например пните ногой, или плюньте в лицо. Это ж такую редкосную гадость надо было написать... (а еще для таких вещей есть замечательный сайт - govnokod.ru)
Называется это умными словами "анонимная функция присвоеная свойству динамического объекта" - чем это чревато: - отсутствие нормальной проверки на этапе компиляции. - такие функции будут создаваться по-новой при каждом выполнении функции-обертки. - контекст такой функции можно переопределить в рантайме. - такие функции плохо перевариваются JIT компилятором, если вообще перевариваются. - судя по названию, ее еще и планировалось передать в качестве обработчика какого-то события, а это добавляет ко всему вышеперечисленному проблемы с очисткой памяти. |
Я пока изучаю исходник чата, и экспериментирую в отдельном проекте, удалось имя, фамилию и номер мобилы получить для начала. А поскольку там такое сплошь и рядом, хотелось бы понять принципы. Устал искать описание, и уже готов довольстоваться малым. Спасибо и на этом :)
Добавлено через 2 минуты Оригинал нашёл Код AS3:
|
Если сами не запостите в *****код, то я с радостью это сделаю с вашего позволения, страна должна знать своих героев. :)
|
Цитата:
Код AS3:
Добавлено через 5 минут Не, ну можете постить, но там весь исходник чата такой, у меня волосы дыбом, но понемногу разбираюсь. Похоже сделано чтобы отпугивать новичков от написания приложений для вконтакта :))) Сам пару месяцев боялся подступиться, смотрел на код, и выключал через 10 минут. Сейчас перешёл в решительное наступление. Что-то начало получаться, методом тыка. Но хочется каждую непонятную ситуацию выяснить, чтобы набраться знаний и опыта. Прежде чем сюда задавать вопрос, прошерстил несколько книг на предмет такой темы, и погуглил, информации нашёл маловато. Даже здесь я уже больше узнал, в этой теме. Спасибо. |
Класс занимает ничтожно мало места по сравнению с тем, сколько это ***** отъест потом места в памяти, если вообще не поломается до того, как достигнет критических размеров. Тут на лицо человек, который никогда в жизни на AS3 ничего не писал, а делал каие-нибудь *****сайты на яваскрипте (и возможно немного PHP). Конечно, обстоятельства могут быть разными, и если это код начинающего / любителя, за который никто не платил и т.д. - то, ну, как бы и ладно, но если за это кто-то хоть копейку заплатил - то оно того явно не стоило :)
Рефакторить - ну, в первую очередь вытащить все функции из других функций и сделать их методами класса, включить strict mode + все предупреждения и исправлять то, что компилятор найдет... PS. Замыкание в ОО языках не имеет никакого смысла. Для того, чтобы оно имело практический смысл, нужен другой подход и другое окружение... Тут нет никаких возможных скрытых причин и оправданий, просто откровенное ***** в чистом виде. |
Оно лежит Вконтакте, в группе "ВКонтакте API ", как один из образцов
Цитата:
|
Какой ужас...
|
Цитата:
|
wvxvw, какой-то ты агрессивный стал :) Скоро буду бояться свой код тут постить :D
Там, кстати, все примеры такого уровня. Это же и их компонентов касается. XDiaBLo, разбирайтесь сразу, непосредственно, с их api. Быстрее получится, чем по этим примерам. |
Я попробую. Возьму у них из примеров только исходник MD5.as и может ещё какие-то мелочи, и попробую сделать свою библиотечку. Хотя я нашёл несколько библиотек по использованию API Vkontakte, надо будет их тоже заценить, может там более достойные примеры найдутся, тем более что одна из них даже прилично закомментирована.
|
XDiaBLo
Функциональные, или такие в которых существует возможность создавать или, как минимум переопределять функции первого порядка (например в C++ / C# это тоже можно). Яваскрипт и AS3 никакого отножения к этим языкам не имеют. udaaff Ну, смотри, если бы это был код человека, который учится или еще что-то в этом роде - то, ну ладно, все делают глупости, но это же выкладывается в качестве примеров! |
Цитата:
Замыкания вещь хорошая, но это наподобие рычага катапульты в самолёте. Вещь нужная, но лучше никогда не использовать - только по строгому назначению. Цитата:
Можно описать отдельный независимый алгоритм (например какую-нибудь сложную мат. ф-цию) и включить его в ООП структуру. Пихать замыкания в ООП структуру, просто потому что можно их запихнуть - плохо. |
Цитата:
|
Да, это замыкание. Почему этим не стоит пользоваться, wvxvw все популярно объяснил. По той же причине не стоит пытаться "передать параметр в обработчик события", как хотят многие начинающие.
|
вопрос в том что путаются понятия: язык и парадигма (что-то очень часто я пишу за сегодня это страшное слово))
ECMAScript, с#, java - языки в основе своей основаны на ООП, но поддерживают ФП (здесь, П== парадигма) http://progopedia.ru/paradigm/ Кстати - там нет про AS2/3 и haxe - нужно ликвидировать пробел. |
самое страшное, что это это замыкание в итоге конвертируются в ООП. и под него генерируется класс Контекст, в внутри, которого в виде кучи говна свален весь скоуп вызова =)
это конечно не точно, но предположение основано на количестве занимаемой памяти объектом в итоге. |
Жесть какая)) А в каком виде там представлен скоуп? Если он компилируется в ООП, то наверное его можно повторить и руками... хочу знать, как делать ненужно )
|
Цитата:
|
Psycho Tiger, я вот не понял ... а что в этом сложного? и что Вам не понятно?
|
Насколько мне известно - скоуп для флеша это что то вроде ссылки на объект, у которого есть область видимости нужной переменной. По идее при замыкании достаточно одной ссылки - на тот объект, в методе которого и было объявлено замыкание. Вы сказали "весь скоуп вызова" - это значит, что я либо не правильно понимаю, что есть скоуп - какой весь, если он один в этом случае - или не правильно понимаю формирование скоупа у замыкания, поэтому попросил разъяснить. Где я неправильно думаю?
|
Скоуп, если быть практичным, это массив из ссылок который формируется перед тем как что либо начать делать внутри функции (опкод pushscope). Если мы таким образом создаем одну функцию в другой, то нам эти ссылки нужо будет передать и вложеной функции тоже. Т.е. например - фильтр в XML - там дополнительная ссылка передается при каждом вызове фильтра и указывает на текущий узел.
|
А, стало понятно =) Спасибо.
|
| Часовой пояс GMT +4, время: 10:02. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.