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)で採用/提案されているアプローチについて何かが欠けていると考え続けています。