なぜ閉鎖についての話題が多いのですか?[閉まっている]


9

開発者の間でクロージャーについての話題が多いのはなぜですか?私のキャリアでは、意図的にそれらを使用したことはありませんが、それらが何であるかを明確に理解していません。

UPD:明確にするために。問題は、なぜ最近、クロージャのコンセプトがそれほど話題になったのかということです。


3
それが何であるかわからないものを意図的にどのように使用できるでしょうか?したがって、基本的には最初にクロージャーが何であるかを尋ねる(または検索する)必要があります。
Steven Jeuris

1
ウィキペディアの記事を読みましたか?それについて何を理解できなかったのですか?
ケビンクライン

2
あなたのキャリアは何に基づいていますか?

4
これはどんな質問ですか?「バズ」って何?何が分からないの?代わりになぜその質問をしなかったのですか?
アーロンノート

4
OPを擁護するために、閉鎖は古い概念ですが、いわばごく最近、町で話題になりました。そして、この概念は、数学をもう少し学んだ人にとっては非常に単純ですが、人々がなぜそれらを理解するのが非常に難しいものであるかのように話す理由も理解できません。たぶん、それは自分をもっとスマートに見せるための方法なのかもしれません。
quant_dev

回答:


22

クロージャーは、それがどこから来たのかを覚えているコードであり、それがもたらされた場所ではまだ使用可能です。

例として、YourObject内にあり、そのメソッドと関数を操作できることを知っている無名関数をJavaで定義しています。この関数は、たとえばSwingに配信され、リスナーなどの内部に深く入り込みますが、ライフラインはそのルーツに戻ります。

これは非常に強力な概念であり、それを使用するコードに気付かずに、コードの他の部分に到達できるコードを提供できます。


1
はい。これは、プロシージャだけでなく状態も他のコードに注入する方法です。これにより、アルゴリズムを設計する際に非常に高い柔軟性が得られます。ステートフルサブルーチンに依存するテンプレート化されたメソッドを設計することができます。これは、コンパイル時には知られていない場合もあります。欠点は、そのメソッドの元のソースへのリンク、つまり状態は、消費するメソッドがそれを知らなくても壊れることがあることです。その場合、見つけにくいランタイムエラーが発生します。
KeithS、2011

1
ハハ、Javaの匿名関数...面白い。
コンフィギュレー

1
@configurator、おかしくない、事実。


Java 7にはクロージャーがありません。

6

クロージャは、さまざまな問題をエレガントな方法で解決するためのものです。実際、クロージャーが存在しないプログラミング言語では、同様の機能を実装するための技法が作成されます。

C ++のファンクタやJavaのRunnablesについて考えてみてください。これらは、クロージャと同様の機能を可能にする単なるテクニックです。ある種の「手動閉鎖」。

クロージャは人気のある言語に統合されているため、人気が高まっています。Javascriptはオンラインアプリケーション(たとえばgoogle docなど)、C#による実装、PHPによる5.3以降の実装などにより成長しています。

クロージャがますます多くのテクノロジーで利用できるようになった今、ますます多くの人々がクロージャに興味を持っていることは非常に簡単になります。

では、クロージャーとは何でしょうか?これは非常に簡単です。クロージャーは関数とそれを実行するためのコンテキストです。これはオブジェクトとして操作されます。なぜこれが便利なのですか?これは、独自のコードを既存のコードにフックするのに役立ちます。

これが必要となる2つの一般的な状況は次のとおりです。アクションが、スレッドプールを使用したマルチスレッド化など、別のコードによって管理されている場合、またはアクションが選択されたイベントで実行される必要がある場合(UIのJavaScriptでよく使用されます)。


分かりましたか?いくつかの「手動閉鎖」(実際には閉鎖ではなく、その動作に似たもの)といくつかの「真の閉鎖」がありますか?

クロージャは言語機能です。一部の言語にはその機能がないため、その言語が提供するツールを使用して手動でクロージャを行う必要があります。それらが真であるかどうかは、私にとって非常に興味深い議論ではありません。
deadalnix、2011

2
@gasanでは、いつでもアセンブリを取り出して、バケット内のGOTOステートメントを使用して、必要なパターンを手動で実行できます。同様に、「while」ループを使用して「for」ループを手動で実行できます(C ++の場合)。より高度でより高いレベルは、一般的なことを行うための標準化された方法を提供します。
フィリップ

6

先日、おもしろい引用がありました。それは、「クラスは関数を持つデータです。クロージャーはデータを持つ関数です」という流れに沿ったものでした。

はい、それは単純化しすぎですが、要点を説明するのに役立ちます。


+1閉鎖とは何かを確認するための素晴らしい方法:D
deadalnix
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.