закрытия и объекты

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

Замыкания - это объекты бедняков. Объекты - закрытие бедняков.

(Не могу вспомнить точный источник, но это были программисты Розетта Стоун, или дзен программирования, или тау программирования ... Google стал настолько переполнен, что не может перейти к первоисточнику)

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


person vrdhn    schedule 01.02.2009    source источник


Ответы (5)


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

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

Наказанный, Антон попрощался с хозяином и вернулся в камеру, чтобы изучить закрытие. Он внимательно прочитал всю серию статей «Lambda: The Ultimate ...» и ее кузенов и реализовал небольшой интерпретатор Scheme с объектной системой на основе замыканий. Он многому научился и с нетерпением ждал возможности сообщить своему хозяину о своих успехах.

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

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

person bendin    schedule 01.02.2009
comment
Это первоисточник цитаты или просто еще одно ее цитирование? - person AnthonyWJones; 01.02.2009
comment
Связанное сообщение является исходным источником этого конкретного коана. Оно возникло в ответ на дискуссию о дуальности замыкание / объект, так что это понятие существует дольше, чем это конкретное повествование. Пройдите по ссылке для получения полной информации. - person bendin; 01.02.2009
comment
Для чего Qc Na / Anton обратный вызов? Я огляделась, поиск этих терминов обнаруживает только ссылки на сам коан. - person Eleanor Zimmermann; 17.12.2015
comment
@Elanor Zimmermann lol, просто посмотрите ссылку. Антон - это Антон ван Страатен. Qc - Квиннек Кристиан. На - Норман Адамс. - person resgh; 27.05.2016

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

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

person AnthonyWJones    schedule 01.02.2009
comment
Хуже того, реализация функций, обеспечиваемых замыканиями, на языке, который напрямую их не поддерживает, эффективно запутает ваши намерения везде, где они используются. Они являются сахаром; но когда вы делаете леденцы, вы не должны сбрасывать со счетов важность сахара ... - person Shog9; 01.02.2009
comment
@ Shog9: Я полностью согласен с вашим первым предложением. Я не знаю, согласен ли я со вторым, потому что мне трудно понять. - person AnthonyWJones; 01.02.2009
comment
Извините, я режу слишком много, когда ограничиваюсь 300 символами. Каменные леденцы - это просто кристаллизованный сахар; если вы не любите сахар, в этом нет никакого смысла. Многие программные конструкции высокого уровня - замыкания, объекты - являются просто инструментами для общения с другими программистами - сахар. Мы пишем леденец. - person Shog9; 02.02.2009

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

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

person Jeremy Weiskotten    schedule 01.02.2009

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

person Cheery    schedule 01.02.2009
comment
Разве делегаты и лямбда-выражения C # c не охватывают это достаточно хорошо? - person krosenvold; 01.02.2009
comment
Делегаты кажутся интересной особенностью. Я выкидываю C # из списка. - person Cheery; 01.02.2009
comment
@Cherry: почему вы убираете C # из списка? - person AnthonyWJones; 01.02.2009
comment
Потому что делегаты, похоже, делают то же самое, что и замыкания и анонимные блоки. Я не уверен, это зависит от их поведения. - person Cheery; 01.02.2009

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

person Tasneem    schedule 15.01.2011
comment
Вы их все знаете? - person Ingo; 10.03.2013