Форум 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=117508)

Wolsh 30.10.2008 00:09

chingachgoog, мы с Вами как-то спорили про клипы и кнопки, так вот это примерно из той же серии. Когда человек чётко представляет что и как работает, он безусловно просто выберет действительно оптимальный вариант для решения своей задачи. Например, создаст ядерное оружие вместо электростанции))) Правда при этом другие будут на него косо смотреть, примерно как я смотрел бы на коллегу, принёсшего мне такое вот рэндзю из активаций. Почти всегда можно найти способ, в народе именуемый хаком, и взломать головы своим соратникам, пытающимся где-нибудь в 2659-й строке понять, откуда что взялось. А можно просто сделать так, как удобно, понятно и предсказуемо. Хитрые головоломные ходы должны использоваться только там, где без них никак. Делегате - да, отличный пример такой необходимости. Для упрощения этой необходимости он и создан))))

chingachgoog 30.10.2008 02:15

Область видимости никуда "не плывет" и почему должна "расходоваться память"? Просто область видимости иная (собственно это и причина применения) и память занята функцией временно.
Но механизм действия функции в функции очень сложен, придумать для чего это надо - не просто. Потому распространен стереотип - "это зло", "*****код" и т.д. А это просто еще одна из редко используемых возможностей флеша, к тому же, мало кому понятная.
PS Попытался вспомнить когда я такую конструкцию применял на практике - не получилось :)

iNils 30.10.2008 02:52

chingachgoog, можно у себя в подъезде гадить, утверждая, что со временем испарится и выветрится, а можно ходить в специально отведенные для этого места. И так называемый стереотип, на является примером ясного и красивого написания кода, который не вызывает проблем и вопросов "а почему не работает", также как вшивание шрифта через библиотеку. А расход памяти создать можно запросто, сохранив ссылку на функцию.

chingachgoog 30.10.2008 09:42

iNils, я уловил аналогию между словами "*****код" и "гадить в подъезде", но не между "гадить в подъезде" и "вложенные функции".
Да, вложенные функции не есть "ясное написание кода, которые не вызывает проблем". Но разве, например, умножение на двое побитовым сдвигом - это "ясное написание кода, которое не вызывает проблем"? В таком случае умножение побитовым сдвигом - это "гадить в подъезде", т.к. есть "специально отведенное место" - простая запись "*2".

iNils 30.10.2008 10:55

chingachgoog, а при чем тут побитовый сдвиг? Это как школьник, которого мапа ругает за двойку, начинает оправдываться словами "А вот у Васи родители его за двойку не ругают". Не подтягивать в качестве примера то, о чем речь и не заходила, вынуждая нас оправдываться за кого-то там, кто так делает и тут вообще не присутствует.

Побитовый сдвиг используется тогда, когда нужно думать именно категорией сдвига, а не умножения. Как пример, работа с RGB и его составляющими.

†‡Paladin‡† 30.10.2008 12:20

Функции в функции не считаю чем-то из ряда вон. В некоторых случаях такая реализация только улучшит читаемость кода.

http://habrahabr.ru/blogs/webdev/38642/ - советую прочитать про то, как это используется в javascript`е

chingachgoog 30.10.2008 12:44

Речь зашла о "ясном написание кода, которое не вызывает проблем". И тут побитовый сдвиг (примененный, скажем для увеличения производительности расчета, по сравнению с простым *2) никакой ясности не внесет и запросто вызовет проблемы. Ну и что? Применять побитовый сдвиг только при работе с RGB?

Нельзя Васи ставить двойку за то, что он решил задачу способом иным, чем предполагал учитель:

Цитата:

Сэр Эрнеcт Резерфорд, президент Королевской академии и лауреат Нобелевской премии по физике рассказывал такую историю:

Однажды к нему обратился коллега за помощью. Он собирался поставить самую низкую оценку по физике одному из своих студентов, в то время как тот утверждал, что заслуживает высшего балла. Оба — преподаватель и студент — согласились положиться на суждение третьего лица, незаинтересованного арбитра. Выбор пал на Резерфорда. Экзаменационный вопрос гласил: «Объясните, каким образом можно измерить высоту здания с помощью барометра?».

Ответ студента был таким: «Нужно подняться с барометром на крышу здания, спустить барометр вниз на длинной верёвке, а затем втянуть его обратно и измерить длину верёвки, которая и покажет точную высоту здания».
Случай был и впрямь сложный, так как ответ был абсолютно полным и верным! С другой стороны, экзамен был по физике, а ответ имел мало общего с применением знаний в этой области.

Резерфорд предложил студенту попытаться ответить ещё раз. Дав ему шесть минут на подготовку, он предупредил его, что ответ должен демонстрировать знание физических законов. По истечении пяти минут студент так и не написал ничего в экзаменационном листе. Резерфорд спросил его, сдаётся ли он, но тот заявил, что у него есть несколько решений проблемы, и он просто выбирает лучшее.

Заинтересовавшись, Резерфорд попросил молодого человека приступить к ответу, не дожидаясь истечения отведённого срока. Новый ответ на вопрос гласил: «Поднимитесь с барометром на крышу и бросьте его вниз, замеряя время падения. Затем, используя формулу, вычислите высоту здания».

Тут Резерфорд спросил своего коллегу преподавателя, доволен ли он этим ответом. Тот, наконец, сдался, признав ответ удовлетворительным. Однако студент упоминал, что знает несколько ответов, и его попросили открыть их.

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

— Неплохо, — сказал Резерфорд. — Есть и другие способы?

— Да. Есть очень простой способ, который, уверен, вам понравится. Вы берёте барометр в руки и поднимаетесь по лестнице, прикладывая барометр к стене и делая отметки. Сосчитав количество этих отметок и умножив его на размер барометра, вы получите высоту здания. Вполне очевидный метод.

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

— Наконец, — заключил он, — среди множества прочих способов решения данной проблемы лучшим, пожалуй, является такой: возьмите барометр с собой, найдите управляющего и скажите ему: «Господин управляющий, у меня есть замечательный барометр. Он ваш, если вы скажете мне высоту этого здания».

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

Студент этот был Нильс Бор (1885–1962), датский физик, лауреат Нобелевской премии 1922 г.

iNils 30.10.2008 13:09

Цитата:

В некоторых случаях такая реализация только улучшит читаемость кода.
В каких?
Цитата:

Сообщение от chingachgoog (Сообщение 773769)
Нельзя Васи ставить двойку за то, что он решил задачу способом иным, чем предполагал учитель:

Слышу звон, да не знаю где он. Цитировать надо к месту, по смыслу, а не по общему слову "двойка".

chingachgoog 30.10.2008 13:18

Цитата:

Сообщение от iNils (Сообщение 773773)
Слышу звон, да не знаю где он.

Когда я слышу звон типа "*****код", "быдлокод" (возможны вариации), то скороее всего звонарь либо очень высокого мнения о себе и судит по своим стереотипам (типа как учитель Бора), либо просто не понимает смысла кода (очень характерно для вложенных функций и связанного с этим объектов активации).

add:
Цитата:

Сообщение от iNils
Цитировать надо к месту, по смыслу, а не по общему слову "двойка".

Там не было цитаты - это просто ассоциация :)

iNils 30.10.2008 13:38

chingachgoog, спутать пример с двойкой, смысл которого в том, что надо за себя отвечеть, с примером о низкой оценкой за не закостенелость мышления, является либо полным не пониманием о чем идет речь, либо разведением демагогии. Если первое, то ладно, люди ошибаются, если второе, то с этим во флейм, а здесь это будет пресекаться.


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

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