2009-02-01 2 views
11

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

Затворов объекты бедняка объектов являются закрытием бедняка

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

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

ответ

18

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

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

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

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

- Антон ван Straaten

+1

Это оригинальный источник цитаты или просто другое цитирование? – AnthonyWJones

+0

Связанное сообщение является исходным источником этого конкретного коана. Это возникло в ответ на дискуссию о двойственности замыкания/объекта, так что понятие было дольше, чем это конкретное сообщение. Перейдите по ссылке для получения полной информации. – bendin

+0

Что такое 'Qc Na' /' Anton' обратный вызов? Я огляделся вокруг, ища эти термины только для ссылок на сам коан. –

3

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

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

4

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

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

+0

Хуже того, реализация функций, предоставляемых закрытием на языке, который не поддерживает их напрямую, будет эффективно запутывать ваши намерения в любом месте, где они используются. Они * являются * сахаром; но когда вы делаете рок-конфеты, вы не должны снижать важность сахара ... – Shog9

+0

@ Shog9: Я полностью согласен с вашим первым предложением. Я не знаю, согласен ли я со вторым, потому что мне трудно понять. – AnthonyWJones

+3

Извините, я заканчиваю слишком много, когда ограничусь 300chars. Рок-конфеты - это просто кристаллизованный сахар; если вам не нравится сахар, нет никакого смысла. Многие высокоуровневые программные конструкции - замыкания, объекты - это просто инструменты для общения с другими программистами - сахаром. Мы пишем рок-конфеты. – Shog9

3

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

+0

Не делегаты и лямбды C# c не покрывают его достаточно хорошо? – krosenvold

+0

Делегаты кажутся интересной особенностью. Я отбрасываю список C# из списка. – Cheery

+0

@ Chherry: почему вы бросаете C# из списка? – AnthonyWJones

2

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

+1

Ты их всех знаешь, не так ли? – Ingo

Смежные вопросы