タグ付けされた質問 「closures」

9
閉鎖とは何ですか?
時々「クロージャ」が言及されているのを見て、それを調べてみましたが、Wikiには理解できる説明がありません。誰かがここで私を助けることができますか?

5
ラムダ式は、単一のメソッドを持つ匿名の内部クラス以上のものですか?
Java 8には、待望のラムダ式に関する新しい誇大宣伝があります。3日ごとに、彼らがいかにクールであるかについての別の記事が表示されます。 私が理解している限り、ラムダ式は(少なくともバイトコードレベルで)単一メソッドを持つ匿名内部クラスにすぎません。これに加えて、別の優れた機能があります-型推論ですが、これと同等の機能は、あるレベルのジェネリックで実現できると信じています(もちろん、ラムダ式のようなきちんとした方法ではありません)。 これを知っていると、ラムダ式は単なるJavaの構文糖衣以上のものをもたらすでしょうか?現在の言語機能では構築できないラムダ式を使用して、より強力で柔軟なクラスやその他のオブジェクト指向の構造を作成できますか?

3
Closures / Lambdas /…に対するC#、Java、Scalaのアプローチのメリットとデメリットは何ですか?
Project Lambda(JSR 335)のメーリングリストに送信されたBrian Goetzの電子メールPeek Past lambdaで表明された実装のアイデアと懸念と、C#とScalaの技術的な実装の違いは何ですか? メールから: 「たぶんラムダは単に内部クラスのインスタンスであるべきで、それは本当にシンプルだろう」という道を探りましたが、最終的には「関数は言語の未来にとってより良い方向である」という立場になりました。 そしてさらに: 世界のオブジェクトであるラムダは、この将来の可能性と矛盾しています。ラムダは関数の世界観ではありません。この柔軟性を維持することは、ラムダにオブジェクト性の外観でさえ負荷をかけないことを支持するポイントの1つです。 結論: Lambdas-are-functionsはドアを開きます。Lambdas-are-objectsはそれらを閉じます。 これらのドアが開いたままになるのを好む。 また、Redditスレッドのユーザーからのコメントは次のとおりです。 私は実際にこれについてNeal Gafterにメールしました。彼の説明についての私の限られた理解では、C#と現在のJavaデザインは、デリゲートは実際にはオブジェクトであり、関数型ではありません。JavaはC#のラムダの短所から学び、それらを避けるべきだと彼は信じているようです(C#がJavaの短所から学び、最初にそれらを避けたように)。 「Lambdas-are-functions」アプローチが「Lambdas-are-objects」よりも多くの機会を将来可能にするのはなぜですか?誰かがどのような違いが存在し、それらがコードの記述方法にどのように影響するかを説明できますか? Scalaの物事が「うまくいく」ことを見て、C#/ Java(8)で採用/提案されているアプローチについて何かが欠けていると考え続けています。
30 c#  java  scala  lambda  closures 


1
GroovyはTennentの通信原理に従っていますか?
Tennent's Correspondence Principleの興味深い議論と、Neal Gafterの簡単な説明を以下に示します。 原則では、式またはステートメントは、クロージャーにラップされてすぐに呼び出されたときに、クロージャーにラップされる前と同じ意味を持つ必要があります。クロージャでコードをラップするときのセマンティクスの変更は、おそらく言語の欠陥です。 Groovy言語はこの原則に従っていますか?

4
安全なクロージャーを実装するにはガベージコレクションが必要ですか?
私は最近、プログラミング言語のオンラインコースに参加しました。このコースでは、概念の中でも特にクロージャが紹介されました。質問をする前に、このコースに触発された2つの例を書き留めて、コンテキストを説明します。 最初の例は、1からxまでの数字のリストを生成するSML関数です。xは関数のパラメーターです。 fun countup_from1 (x: int) = let fun count (from: int) = if from = x then from :: [] else from :: count (from + 1) in count 1 end SML REPLで: val countup_from1 = fn : int -> int list - countup_from1 5; val it = [1,2,3,4,5] …

4
JavaのクロージャはJavaコミュニティにどのような影響を与えますか?
これは、Javaで計画されている機能について最も話題の1つであるClosuresです。私たちの多くは彼らを切望しています。私たちの中には(Iを含む)少し我慢できず、スクリプティング言語を利用してその空白を埋めています。 しかし、クロージャがついにJavaに到達すると、Javaコミュニティにどのように影響しますか?VMをターゲットとするスクリプト言語の進歩は、クロールの速度を落とすのか、そのままにするのか、それとも容認するのか?人々は新しいクロージャー構文に群がり、Javaコードベースをより機能的に構造化された実装に変えますか?Java全体にクロージャが散在するのを見るだけでしょうか ツール/ IDEサポートにどのような影響がありますか?パフォーマンスはどうですか?そして最後に、人気が高まっている他の言語と比較して、Javaが言語として継続的に採用されることはどういう意味ですか? 提案されている最新のJava Closure構文仕様の1つの例を提供するには: public interface StringOperation { String invoke(String s); } // ... (new StringOperation() { public invoke(String s) { new StringBuilder(s).reverse().toString(); } }).invoke("abcd"); になるだろう... String reversed = { String s => new StringBuilder(s).reverse().toString() }.invoke("abcd"); [ソース:http://tronicek.blogspot.com/2007/12/closures-closure-is-form-of-anonymous_28.html]
11 java  closures 

3
副作用のあるクロージャーは「機能的なスタイル」と見なされますか?
最新のプログラミング言語の多くは、クロージャ、つまりコード(ブロックまたは関数)の概念をサポートしています。 値として扱うことができるため、変数に格納し、コードのさまざまな部分に渡し、プログラムの一部で定義し、同じプログラムのまったく異なる部分で呼び出すことができます。 変数が定義されているコンテキストから変数をキャプチャし、後で呼び出されたときに(おそらくまったく異なるコンテキストで)変数にアクセスできます。 以下は、Scalaで記述されたクロージャーの例です。 def filterList(xs: List[Int], lowerBound: Int): List[Int] = xs.filter(x => x >= lowerBound) 関数リテラルx => x >= lowerBoundには、同じ名前のlowerBound関数の引数によって閉じられている(バインドされている)自由変数が含まれていますfilterList。クロージャはライブラリメソッドに渡さfilterれ、通常の関数として繰り返し呼び出すことができます。 私はこのサイトで多くの質問と回答を読んでいますが、私が理解している限り、閉鎖という用語は関数型プログラミングと関数型プログラミングスタイルに自動的に関連付けられることがよくあります。 ウィキペディアの関数プログラミングの定義は次のとおりです。 コンピュータサイエンスでは、関数型プログラミングは、計算を数学関数の評価として扱い、状態や変更可能なデータを回避するプログラミングパラダイムです。状態の変化を強調する命令型プログラミングスタイルとは対照的に、関数の適用を強調します。 そしてさらに [...]関数コードでは、関数の出力値は関数に入力された引数にのみ依存します[...]。副作用をなくすことで、プログラムの動作の理解と予測がはるかに容易になります。これは、関数型プログラミングを開発するための主要な動機の1つです。 一方、プログラミング言語によって提供される多くのクロージャー構成では、クロージャーが非ローカル変数をキャプチャーし、クロージャーが呼び出されたときにそれらを変更できるため、それらが定義された環境に副作用が生じます。 この場合、クロージャは関数型プログラミングの最初のアイデアを実装します(関数は他の値のように移動できるファーストクラスのエンティティです)が、2番目のアイデアは無視します(副作用を回避します)。 副作用のあるこのクロージャの使用は、関数型スタイルと見なされますか、それとも、関数型と非関数型プログラミングスタイルの両方に使用できるより一般的な構造と見なされますか?このトピックに関する文献はありますか? 重要な注意点 副作用の有用性や副作用のあるクロージャーの有用性については質問していません。また、副作用の有無にかかわらず、クロージャーの長所/短所についての議論には興味がありません。 このようなクロージャの使用が関数型プログラミングの支持者によって依然として関数型スタイルと見なされているかどうか、または逆に関数型スタイルを使用する場合にそれらの使用が推奨されていないかどうかを知りたいだけです。

3
なぜ閉鎖についての話題が多いのですか?[閉まっている]
ここで何が質問されているのかを理解することは困難です。この質問は、あいまいで、あいまいで、不完全で、過度に広い、または修辞的であり、現在の形では合理的に回答することができません。再開できるようにこの質問を明確にするヘルプについては、ヘルプセンターに アクセスしてください。 8年前休業。 開発者の間でクロージャーについての話題が多いのはなぜですか?私のキャリアでは、意図的にそれらを使用したことはありませんが、それらが何であるかを明確に理解していません。 UPD:明確にするために。問題は、なぜ最近、クロージャのコンセプトがそれほど話題になったのかということです。
9 closures 

3
プロトタイプとクロージャを使用することで最もよく解決されるプログラミングの一般的な問題は何ですか?
両方の概念を理解している限り、インスタンス化および/またはカプセル化されたクラスのようなブロックを作成するためにそれらを使用する以外に、JavaScriptのクロージャーとプロトタイプをどのように利用できるのかわかりません(これは私にとってアセットよりも回避策のようです) ) 値としての関数や非ブール値の論理評価など、他のJS機能は、恋に落ちるのがはるかに簡単です... プロポタイプの継承とクロージャを使用することで最もよく解決される一般的なプログラミングの問題は何ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.