13

関数型プログラミングは..古典的なものです(マーク・トウェインのタイプ)。SICP に関する別の記事を読んでいるときに、人々が閉鎖がそこでの思考に与えた大きな影響について話しているときに、私はこれを思い出しました。

クロージャーは貧乏人のオブジェクト オブジェクトは貧乏人のクロージャー

(正確なソースを思い出すことはできませんが、それはプログラマーのロゼッタストーン、またはプログラミングの禅、またはプログラミングのタウでした... Googleは非常に混雑しているため、元のソースにアクセスできません)

それで、共同プログラマー...あなたの見解は...あなたがいつも見逃していたクロージャーです..または、プリプロセッサーができる構文糖衣です!!

4

5 に答える 5

21

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

由緒あるマスターQcNaは、彼の学生であるAntonと一緒に歩いていました。アントンは、マスターに話し合いを促すことを望んで、「マスター、オブジェクトは非常に良いものだと聞きました。これは本当ですか?」と言いました。Qc Naは彼の生徒を哀れに見て、「愚かな生徒-物はただ貧乏人のクロージャにすぎない」と答えました。

懲らしめられて、アントンは彼の主人から彼の休暇を取り、彼の独房に戻って、閉鎖を研究することに熱心でした。彼は「Lambda:The Ultimate ...」シリーズの論文全体とそのいとこを注意深く読み、クロージャーベースのオブジェクトシステムを備えた小さなSchemeインタープリターを実装しました。彼は多くのことを学び、彼の進歩を主人に知らせることを楽しみにしていました。

アントンはQcNaとの次の散歩で、「マスター、私はこの問題を熱心に研究し、オブジェクトが本当に貧乏人のクロージャであることを理解しました」と言って、マスターに感銘を与えようとしました。Qc Naは、アントンを棒で殴り、「いつ学ぶのか?クロージャは貧乏人の目的だ」と答えた。その瞬間、アントンは悟りを開いた。

--Anton van Straaten

于 2009-02-01T15:59:36.120 に答える
4

私はJavascriptで長い間クロージャを使用してきました。「オブジェクト」を形成する場合もあれば、インスタンスデータをコールバックに提供するための便利な方法である場合もあります。

私に関する限り、それらは箱の中の別の便利なツールですが、それは単なる砂糖を超えています。砂糖は、もう少し複雑な構文で合理的に実行できる何かに関連しています。それらを直接サポートしていない言語でクロージャを達成することは非常に困難です。

于 2009-02-01T16:00:03.013 に答える
3

「シンタックスシュガー」の定義にもよると思いますが、クロージャーはシンタックスシュガー以上のものです。

私にとって、Java 1.5のfor-eachは構文糖衣構文でしたが、たとえば、Rubyブロックはそれをはるかに超えています。クロージャは、便利なレベルの抽象化を提供します。これは、意図の暗黙的な宣言に役立ちます。これは、DSL風の構文への大きな一歩です。

于 2009-02-01T15:56:44.767 に答える
3

クロージャと匿名ブロックは非常に重要なプログラミング構造であり、Java、C ++、C、およびそれらが欠落している他の言語については、すぐに不足します。これらは、非同期やイベントのようなもので特に役立ちます。また、関数を使用する関数をより楽しく使用できるようにし、追加の構文なしでより多くのことを実行するための選択肢を提供します。(参照:smalltalkとスキーム)

于 2009-02-01T16:07:37.927 に答える
2

クロージャーはオブジェクト指向言語のオブジェクトのようなものです。しかし、関数型言語にはサブタイプと継承がありません。

于 2011-01-15T12:30:20.193 に答える