JavaのクロージャはJavaコミュニティにどのような影響を与えますか?


11

これは、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]


あなたが投稿した例は何年も前のものです-それが現在の提案の代表であると確信していますか?
ダニエル・アーウィッカー

そうではないかもしれません:私の例を修正してください

3
最近、Javaの使用をほぼ停止しました。しかし、まだ閉鎖を楽しみにしています。
アント

@ダニエル-これは現在の提案ではなく、ここにもっと新しい(そして非常に異なる)提案があるようです:baptiste-wicht.com/2010/05/…–
ニコール

それはC#ラムダ式のようなものですか?
ルイスリース

回答:


4

多くの「普通の」Java開発者がこの概念に慣れていない場合、この概念を理解するのに時間がかかると思いますが、次第に通常のJavaの使用が徐々に楽になっていくでしょう。Java 5が登場したときにジェネリックと同じくらい迅速に受け入れられれば素晴らしいと思います。

VMターゲットスクリプト言語を使用する利点の1つに過ぎないため、VMターゲットスクリプト言語には影響しないと思います。


3

光沢のある新しいツールに伴う通常のサイクルがあります。

  • 大量の興奮、それを乱用する新しいユーザーの突風。これは、新しいツールの制限とその使用方法を理解するのに役立つため、正常で健全です。
  • より控えめな人は隣人と言って、早期採用者を愚かであると考えます
  • 最終的には興奮が消え、早期導入者は新しいツールを使用する健全な方法に落ち着きます
  • より控えめな人々は、新しいツールを使用する人々の生産性をen望し始め、今では健全なパターンを使用して、そのツールの採用を開始します。

これをすべて繰り返すには数年かかります。これはアノテーションとジェネリックについても当てはまり、クロージャーについても同様です。

スクリプト言語の人々への影響:

  • クロージャをサポートする言語の場合、これはスクリプト言語の作成者が仕事をより効率的に行うのに役立ちます。彼らはすでにクロージャの使用方法を知っているので、必ずしもおかしなことをするわけではありません。
  • クロージャをサポートしない言語では、これはほとんど無視されます。

1

マルチスレッドプログラミングが好きな人は、JavaとLispの間の言語インピーダンスの不一致のために、不変のデータ構造をJavaに埋め込み、それらをよりlispに近い方法で処理することができます。

上記のいずれも使用しない(または理解しない)人は、以前と同じように物事を行うことができます。


1
これは意味がありません。クロージャは、スレッド化や可変性とは関係ありません。
davidk01

彼らはそうします。適切な閉鎖は、脳の爆発なしで動作する不変性が必要です。
ペルメクラ

いいえ、そうではありません。クロージャーは、それが作成された環境について知っているコードの一部です。それだけです。
-davidk01

1
@ davidk01の定義は問題ありませんが、クロージャに可変変数へのリンクがある場合、変数が変更されるとその結果も変わります。通常、これは望むものではありませんが、コンパイラーが反対しなければ、エラーはほとんど検出できません。
permeakra

1
@ davidk01いいえ、私はしません。私のポイントは、キャッチされた変数の不変性と結びついていれば、クロージャー/ラムダがうまく機能するということです。さもなければ、あなたはツィンチに翻弄され、献身的な崇拝者だけがここにチャンスを持っています。
-permeakra

1

クロージャーに精通している人々は、アプリケーションコードでクロージャーを使い始めると思います。Javaの古いバージョンとの後方互換性を維持するために、しばらくライブラリでそれらを回避します。

他の言語のクロージャーに慣れていないプログラマーは、Javaでクロージャーを採用するのが遅くなります。

ジェネリックは、アップグレード時に表示されるすべての警告とSDKへの組み込みのために、Javaに部分的に導入されたときにすぐに採用されました。これはクロージャーには当てはまりません。それらの存在の証拠を見つけることは難しくなるので、それらを使用したい人だけがそれらを使用します。

他のJVMスクリプト言語の開発が停止するとは思わない。これらの言語には、モメンタムとクロージャ以外の多くの機能があります。ただし、新しいJVM言語を作成するための主要な推進力はクロージャであったため、新しいJVM言語はあまり見られないかもしれません。


あなたは見ている必要がありmseifed.blogspot.se/2012/09/... 私はそれはすごいと思います!
momomo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.