All streams
Search
Write a publication
Pull to refresh
346
Коробов Михаил @kmikeread⁠-⁠only

Пользователь

Send message
через 5 лет это будет трансцендентный ужас перед бездной, по сравнению с которым нынешние ужасы покажутся майскими цветочками на зеленой лужайке в солнечный день.

Но все будет круто.
А чтобы ужасов было меньше (или больше)), стоит почитать умных дядек типа Фаулера и GOF, если еще не.
Не совсем согласен с тем, что программистов делают в вузах. Вы правильно написали про мастеров и ремесленников. Только дело в том, что и «мастерству» человек учит себя сам. Ни разу не видел, чтобы кто-то кого-то смог научить программированию.

Но вот парадокс — хороший вуз по специальности и правда очень полезен. Из-за того, что в хорошем вузе по специальности огромное число умных и думающих людей, которые интересуются примерно тем же, и сознательно учатся (в.т.ч. и преподаватели). Не обязательно в абсолютных числах «огромное число», но по сравнению с любым другим местом-то уж точно.
Вы молодец. Но все равно, если лет через 5 глянете на то, как пишете сейчас, думаю, ужаснетесь.)
Решать олимпиаду — не значит быть программистом.

Хорошо и здорово, когда человек может решить олимпиаду. Это показатель ума и таланта. Возможно, знание некоторых алгоритмов еще. Показатель того, что человек потенциально может стать хорошим программистом.
есть ошибка, скобки не поставил перед двоеточием, надо что-то вроде
def y():
   ....

а "..." — это тело функции, мог бы написать «lala» или «blabla», это не языковая конструкция
Конкретно то, что вы спрашиваете — нет, насколько я знаю. У декораторов немного другой, более узкий смысл. Декораторы — синтаксический сахар для упрощения кода вида
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 или что?) к примерам с вычислением квадратов. Поясните, пожалуйста.
вроде на питоне проще можно:
def foo(sequence):
    return [x*x for x in sequence if x%2]

гвидо вообще ругается на лямбды, map и filter всякие, убрать их хочет)
а никак) вообще весь ООП на простых примерах выглядит очень глупо.
а когда они действительно требуются? Если не брать в расчет уже десять раз повторенные мной замыкания?
забавно, заминусовали дядьку Фаулера)
Часто длинный список параметров функций получается из-за того, что ей надо знать контекст. В случае объектов он инкапсулируется, и метод уже знает большинство своих параметров.

Information

Rating
Does not participate
Location
Екатеринбург, Свердловская обл., Россия
Works in
Date of birth
Registered
Activity