через 5 лет это будет трансцендентный ужас перед бездной, по сравнению с которым нынешние ужасы покажутся майскими цветочками на зеленой лужайке в солнечный день.
Но все будет круто.
А чтобы ужасов было меньше (или больше)), стоит почитать умных дядек типа Фаулера и GOF, если еще не.
Не совсем согласен с тем, что программистов делают в вузах. Вы правильно написали про мастеров и ремесленников. Только дело в том, что и «мастерству» человек учит себя сам. Ни разу не видел, чтобы кто-то кого-то смог научить программированию.
Но вот парадокс — хороший вуз по специальности и правда очень полезен. Из-за того, что в хорошем вузе по специальности огромное число умных и думающих людей, которые интересуются примерно тем же, и сознательно учатся (в.т.ч. и преподаватели). Не обязательно в абсолютных числах «огромное число», но по сравнению с любым другим местом-то уж точно.
Хорошо и здорово, когда человек может решить олимпиаду. Это показатель ума и таланта. Возможно, знание некоторых алгоритмов еще. Показатель того, что человек потенциально может стать хорошим программистом.
Конкретно то, что вы спрашиваете — нет, насколько я знаю. У декораторов немного другой, более узкий смысл. Декораторы — синтаксический сахар для упрощения кода вида
def y:
...
y = f(y)
Вместо этого можно писать так:
@f
def y:
...
Вообщем штука стимулирует писать (и использовать) реюзабельные функции-модификаторы других функций. И эта возможность довольно активно используется там, где нет необходимости поддерживать совместимость с python 2.3.
Shift в Windows (по крайней мере, в xp по умолчанию) тоже имеет побочные эффекты. Подержите его несколько секунд, вылезет то-ли управление курсором мыши с клавиатуры, то-ли еще что-то такое.
За приведенный вами код надо пороть, тут согласен.
Другое дело, что пример какой-то абстрактный и обычно так никто не пишет.
Пишут так:
int someshit(params) {
int theData;
... #
int doFoo() {
# делаем что-то c theData и/или с params
...
}
return doFoo;
}
И вот тут вложенные функции с замыканиями к месту. И именно так и пишут на языках, которые это поддерживают. Замыкания — не зло, зло — это недостаток знаний)
Приплели сюда зачем-то «нормальные ОО языки», как будто javascript ущербный какой-то.
ОО тут вообще не при чем, важно то, допускает ли язык динамическую типизацию.
Извините, если вас не так понял.
«Использование локальных данных внешней функи во внутренних, как раз, говорит о том, что деление кода на блоки не продумано.»
Одним предложением разнесли в пух и прах всю идею замыканий и довольно большую часть функционального программирования заодно)
Представьте себе функцию, которая возвращает другую, более специальную функцию, сконструированную на основе переданных параметров. Это очень распространенный подход в языках, поддерживающих замыкания (по крайней мере, могу сказать с уверенностью про python и javascript).
По мне так Math.pow(2, 5) тоже нормально, а Math.pow(base=2, exponent=5) — это не обязательно.
Но согласен в том, что хорошо, когда такая возможность присутствует, и радует то, что в питоне она есть.
Теперь вроде понятно.
Но позаступаюсь за питон все ж немного)
а) в питоне можно добавлять методы ко всему чему угодно, кроме встроенных типов (всякие int и тд);
б) для определения функций вида x(y(b)) в питоне тоже существует сокращенный вариант без скобок — это декораторы.
Все равно не понял, какое отношение функция, возвращающая список (смотрю на примеры в haskell и python), имеет к наполнению существующего класса новыми функциями.
Ну да, в питоне (и haskell?) есть duck typing, а в С# его вроде бы нет, но есть шаблоны, я хоть в том направлении думаю?))
кстати, не понял, как относится замечание о невозможности расширения существующих классов (это monkey-patching или что?) к примерам с вычислением квадратов. Поясните, пожалуйста.
Часто длинный список параметров функций получается из-за того, что ей надо знать контекст. В случае объектов он инкапсулируется, и метод уже знает большинство своих параметров.
Но все будет круто.
А чтобы ужасов было меньше (или больше)), стоит почитать умных дядек типа Фаулера и GOF, если еще не.
Но вот парадокс — хороший вуз по специальности и правда очень полезен. Из-за того, что в хорошем вузе по специальности огромное число умных и думающих людей, которые интересуются примерно тем же, и сознательно учатся (в.т.ч. и преподаватели). Не обязательно в абсолютных числах «огромное число», но по сравнению с любым другим местом-то уж точно.
Хорошо и здорово, когда человек может решить олимпиаду. Это показатель ума и таланта. Возможно, знание некоторых алгоритмов еще. Показатель того, что человек потенциально может стать хорошим программистом.
а "..." — это тело функции, мог бы написать «lala» или «blabla», это не языковая конструкция
Вместо этого можно писать так:
Вообщем штука стимулирует писать (и использовать) реюзабельные функции-модификаторы других функций. И эта возможность довольно активно используется там, где нет необходимости поддерживать совместимость с python 2.3.
Другое дело, что пример какой-то абстрактный и обычно так никто не пишет.
Пишут так:
И вот тут вложенные функции с замыканиями к месту. И именно так и пишут на языках, которые это поддерживают. Замыкания — не зло, зло — это недостаток знаний)
ОО тут вообще не при чем, важно то, допускает ли язык динамическую типизацию.
Извините, если вас не так понял.
Одним предложением разнесли в пух и прах всю идею замыканий и довольно большую часть функционального программирования заодно)
Представьте себе функцию, которая возвращает другую, более специальную функцию, сконструированную на основе переданных параметров. Это очень распространенный подход в языках, поддерживающих замыкания (по крайней мере, могу сказать с уверенностью про python и javascript).
Но согласен в том, что хорошо, когда такая возможность присутствует, и радует то, что в питоне она есть.
Но позаступаюсь за питон все ж немного)
а) в питоне можно добавлять методы ко всему чему угодно, кроме встроенных типов (всякие int и тд);
б) для определения функций вида x(y(b)) в питоне тоже существует сокращенный вариант без скобок — это декораторы.
Ну да, в питоне (и haskell?) есть duck typing, а в С# его вроде бы нет, но есть шаблоны, я хоть в том направлении думаю?))
гвидо вообще ругается на лямбды, map и filter всякие, убрать их хочет)