開発者の間でクロージャーについての話題が多いのはなぜですか?私のキャリアでは、意図的にそれらを使用したことはありませんが、それらが何であるかを明確に理解していません。
UPD:明確にするために。問題は、なぜ最近、クロージャのコンセプトがそれほど話題になったのかということです。
開発者の間でクロージャーについての話題が多いのはなぜですか?私のキャリアでは、意図的にそれらを使用したことはありませんが、それらが何であるかを明確に理解していません。
UPD:明確にするために。問題は、なぜ最近、クロージャのコンセプトがそれほど話題になったのかということです。
回答:
クロージャーは、それがどこから来たのかを覚えているコードであり、それがもたらされた場所ではまだ使用可能です。
例として、YourObject内にあり、そのメソッドと関数を操作できることを知っている無名関数をJavaで定義しています。この関数は、たとえばSwingに配信され、リスナーなどの内部に深く入り込みますが、ライフラインはそのルーツに戻ります。
これは非常に強力な概念であり、それを使用するコードに気付かずに、コードの他の部分に到達できるコードを提供できます。
クロージャは、さまざまな問題をエレガントな方法で解決するためのものです。実際、クロージャーが存在しないプログラミング言語では、同様の機能を実装するための技法が作成されます。
C ++のファンクタやJavaのRunnablesについて考えてみてください。これらは、クロージャと同様の機能を可能にする単なるテクニックです。ある種の「手動閉鎖」。
クロージャは人気のある言語に統合されているため、人気が高まっています。Javascriptはオンラインアプリケーション(たとえばgoogle docなど)、C#による実装、PHPによる5.3以降の実装などにより成長しています。
クロージャがますます多くのテクノロジーで利用できるようになった今、ますます多くの人々がクロージャに興味を持っていることは非常に簡単になります。
では、クロージャーとは何でしょうか?これは非常に簡単です。クロージャーは関数とそれを実行するためのコンテキストです。これはオブジェクトとして操作されます。なぜこれが便利なのですか?これは、独自のコードを既存のコードにフックするのに役立ちます。
これが必要となる2つの一般的な状況は次のとおりです。アクションが、スレッドプールを使用したマルチスレッド化など、別のコードによって管理されている場合、またはアクションが選択されたイベントで実行される必要がある場合(UIのJavaScriptでよく使用されます)。
先日、おもしろい引用がありました。それは、「クラスは関数を持つデータです。クロージャーはデータを持つ関数です」という流れに沿ったものでした。
はい、それは単純化しすぎですが、要点を説明するのに役立ちます。