Затворы и объекты

Функциональное программирование.. похоже на классический (Mark Twain type). Читая другие статьи о SICP, где люди говорят о на самом деле большое влияние закрытия было на мысли, я напомнил об этом, который я читал много лет назад

Закрытие - это плохие человеческие объекты Объекты - плохое закрытие человека

(Не могу вспомнить точный источник, но это были программисты rosetta stone, или zen программирования, или tau программирования... google стал настолько переполненным, что не может перейти в исходный источник)

Итак, со-программисты... Что вы берете... закрывают то, что вы всегда отсутствовали.. или просто какой-то синтаксический сахар, который может выполнять препроцессор!

Ответ 1

http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg03277.html

Достопочтенный мастер Qc Na шел со своим учеником Антоном. Надеюсь на попросите мастера в дискуссии, Антон сказал: "Учитель, я слышал, что объекты - очень хорошая вещь - это правда?" Qc Na смотрел с жалостью на его ученик и ответил: "Глупый ученик - объекты - всего лишь бедные люди закрытие".

Обеспокоенный, Антон ушел от своего хозяина и вернулся в свою камеру, намерение изучить закрытие. Он внимательно прочитал всю "Лямбду: Ultimate..." и его кузенов, и реализовал небольшую Синхронный переводчик с объектной системой на основе замыкания. Он многому научился, и с нетерпением ожидал информирования своего хозяина о своем прогрессе.

На следующей прогулке с Qc Na Антон попытался произвести впечатление на своего хозяина говоря: "Учитель, я усердно изучил этот вопрос, и теперь понимаю что объекты действительно являются закрытыми людьми". Qc Na ответил ударом Антон с палкой, говоря: "Когда вы узнаете? Закрытие - это бедный человек объект". В этот момент Антон стал просветленным.

- Антон ван Страатен

Ответ 2

Я использую закрытие в течение длительного времени в Javascript. Иногда они формируют "объект", в других случаях они являются полезным способом предоставления данных экземпляра для обратного вызова.

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

Ответ 3

Закрытие - это гораздо больше, чем синтаксический сахар, хотя я думаю, что это зависит от вашего определения "синтаксического сахара".

Для меня Java 1.5 для каждого был синтаксическим сахаром, но, например, блоки Ruby выходят далеко за рамки этого. Закрытие обеспечивает удобный уровень абстракции, который полезен для неявного объявления о намерениях - большой шаг к синтаксису DSL-ish.

Ответ 4

Закрытия и анонимные блоки - довольно важные конструкторы программирования, и я быстро ударяю по java, С++, C и любому другому языку, который их не хватает. Они особенно полезны для асинхронных и событийных событий. Они также делают функции-функции более приятными для использования и предоставляют возможность делать больше вещей без дополнительного синтаксиса. (см.: smalltalk и схема)

Ответ 5

закрытие подобно объектам на языках OO. Но функциональным языкам не хватает подтипов и наследования.