2009-02-01 20 views
11

Funktionale Programmierung .. ist wie klassisch (Mark Twain's type). während ein anderer Artikel über SICP Lesen, wo die Leute über dort denken die großen Einfluss Schließungen hatte sprechen, habe ich daran erinnert, dem ich im Alter von armen Mannes Objekte Objekte sind schlechte Menschen sind Schließung vor lesenVerschlüsse und Objekte

Closures

(kann nicht genaue Quelle erinnern, aber es war Programmierer rosetta, oder zen-Programmierung, oder tau-Programmierung ... google so geworden ist voll, dass nicht um seine Quelle gehen)

so Co-Programmierer ... Was ist Ihr Nehmen ... sind Verschluss etwas, das Sie immer vermisst haben .. oder nur etwas syntaktischen Zucker, , die ein Präprozessor tun kann !!

Antwort

18

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

Der ehrwürdige Meister Qc Na wurde mit seinem Schüler Anton Fuß. In der Hoffnung auf den Meister in eine Diskussion zu bringen, sagte Anton "Meister, ich habe gehört, dass Objekte eine sehr gute Sache sind - ist das wahr?" Qc Na schaute mitleidig auf seinen Schüler und antwortete: "Foolish Pupille - Objekte sind nur ein armer Mann Verschlüsse."

Zögernd verabschiedete sich Anton von seinem Meister und kehrte in seine Zelle mit der Absicht, Verschlüsse zu studieren, zurück. Er las sorgfältig die gesamte "Lambda: The Ultimate ..." Reihe von Papieren und Cousins ​​und implementierte einen kleinen Scheme Interpreter mit einem auf Verschluss basierenden Objektsystem. Er lernte viel, und freute sich darauf, seinen Meister über seine Fortschritte zu informieren.

Bei seinem nächsten Spaziergang mit Qc Na, versucht Anton seinen Meister von sagen zu beeindrucken „Meister, ich habe fleißig die Angelegenheit untersucht und verstehen jetzt die Objekte Schließungen ist wirklich ein armer Mann sind.“ Qc Na reagierte, indem er mit seinem Stock auf Anton schlug und sagte: "Wann wirst du lernen? Verschlüsse sind ein armes Mann Objekt." In diesem Moment wurde Anton erleuchtet.

- Anton van Straaten

+1

Ist das die ursprüngliche Quelle des Zitats oder nur ein anderes Zitat davon? – AnthonyWJones

+0

Die verknüpfte Nachricht ist die ursprüngliche Quelle dieses speziellen Koans. Es entstand als Antwort auf eine Diskussion über die Schließung/Objekt-Dualität, so dass die Idee länger als diese besondere Erzählung war. Folgen Sie dem Link für alle Details. – bendin

+0

Was ist 'Qc Na' /' Anton' ein Rückruf? Ich sah mich um, suchte nach diesen Begriffen und fand nur Hinweise auf das Koan. –

3

Verschlüsse sind viel mehr als syntaktischer Zucker, obwohl ich denke, es ist etwas von Ihrer Definition von „syntaktischer Zucker“ abhängt.

Für mich Java 1.5 die for-each war syntaktischer Zucker, aber zum Beispiel gehen Ruby-Blöcke weit darüber hinaus. Closures bieten eine komfortable Abstraktionsebene, die für implizite Absichtserklärungen nützlich ist - ein großer Schritt in Richtung DSL-ish-Syntax.

4

Ich habe in Javascript für eine lange Zeit Schließungen im Einsatz. Manchmal bilden sie ein "Objekt", manchmal sind sie eine nützliche Möglichkeit, Instanzdaten für einen Callback bereitzustellen.

Soweit es mich betrifft sie ein weiteres nützliches Tool in der Box sind, aber es geht über die reine Zucker. Sugar bezieht sich auf etwas, das Sie vernünftigerweise mit einer etwas komplizierteren Syntax tun könnten. Eine Schließung in einer Sprache, die sie nicht direkt unterstützt, wäre sehr schwierig.

+0

Schlimmer noch, die Implementierung der Funktionalität, die von Closures in einer Sprache bereitgestellt wird, die sie nicht direkt unterstützt, verschleiert effektiv Ihre Absichten, wo immer sie verwendet wird. Sie * sind * Zucker; aber wenn du Kandiszucker machst, darfst du nicht die Bedeutung von Zucker abzählen ... – Shog9

+0

@ Shog9: Ich stimme deinem ersten Satz vollkommen zu. Ich weiß nicht, ob ich der zweiten zustimme oder nicht, da ich es schwer zu verstehen finde. – AnthonyWJones

+3

Entschuldigung, ich lande zu viel, wenn ich auf 300 Zeichen limitiert bin. Kandiszucker ist einfach kristallisierter Zucker; Wenn du keinen Zucker magst, hat das keinen Sinn. Viele High-Level-Programmierkonstrukte - Verschlüsse, Objekte - sind einfach Werkzeuge, um mit anderen Programmierern zu kommunizieren - Zucker. Wir schreiben Kandiszucker. – Shog9

3

Closures und anonyme Blöcke sind ziemlich wichtig Programmierkonstrukte und ich traf den Mangel schnell in Java, C++, C und über jede andere Sprache, die sie fehlt. Sie sind besonders nützlich bei asynchronen und vielseitigen Dingen. Sie machen auch die Verwendung von Funktionsfunktionen angenehmer und bieten die Möglichkeit, mehr Dinge ohne zusätzliche Syntax zu tun. (siehe: Smalltalk und Schema)

+0

Bedecken Delegierte und Lambdas von C# c es nicht ziemlich gut? – krosenvold

+0

Delegierte scheinen ein interessantes Merkmal. Ich lasse die C# von der Liste fallen. – Cheery

+0

@Cherry: warum lässt du C# von der Liste fallen? – AnthonyWJones

2

Verschlüsse sind wie Objekte in OO-Sprachen. Aber funktionalen Sprachen fehlt Subtyping und Vererbung.

+1

Sie kennen sie alle, oder? – Ingo