BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Java ラムダ式のシンタックスの第一バージョンが議論に火をつける

Java ラムダ式のシンタックスの第一バージョンが議論に火をつける

ブックマーク

原文(投稿日:2010/06/03)へのリンク

数日前に、Oracleの Maurizio Cimadamore氏は、最初のラムダ式の実装OpenJDK のMercurialリポジトリにアップした。これで新しいシンタクスを初めて見ることができるが、コミュニティで議論を巻き起こしている。

現在のプロトタイプは、以下のフィーチャをサポートする:

ここに示すコード片は、整数値をとり1を足して戻す、簡単なラムダ式の宣言である:

int i1 = #()(3).();
assertTrue(3 == i1);
Integer i2 = #()(3).();
assertTrue(3 == i2);
int i3 = #(int x)( x + 1 ).(3);
assertTrue(4 == i3);
int i4 = #(Number x)(x.intValue()).(new Float(3.0f));
assertTrue(3 == i4);
Object o = #()(3);
assertTrue(o != null); 

プロトタイプは、 strawman 提案に記述されているシンタックスをサポートし、シンタクスがどのようなものか、もっと理解したければ 回帰 テストを見るとよい。

通常Javaは、シンボルの代わりに長い言葉を使うので、このシンタックスに抵抗を感じ、言語のルック&フィールに従っていないと感じる人も多い。

AjaxianのDion Almaer氏は、このシンタックスは、JavaよりPerlに近いと感じている:

Integer i2 = #()(3).(); //i2 = 3
int i4 = #(Number x)(x.intValue()).(new Float(3.0f)); //i4 = 3 エー、Java?それともPerl!!

同じように、 Ruby on Railsの作成者である David Heinemeier Hansson氏は、 提案されているシンタックスにはノイズがたくさんあると、言っている:

Java 7の新しいクロージャのシンタックス: int i4 = #(Number x)(x.intValue()).(new Float(3.0f)); -- 新しいコードライン-ノイズのチャンピオンを手にした、と思う。

フォーラムとディスカッション グループは、ラムダ シンタックスを批判するJavaの開発者からメッセージを受け取った:

Java Posse Group

“ワオー、何て醜い、ソースコードを難読化したい人たちが大喜びだね。”

“うわ! 「コンパイラ-作成者の仕事を楽にする」目的の匂いがプンプンする。もっといいソリューションがあるに違いない、この問題の限られたガイドラインの範囲でさえ。Objective-Cのブロックだって、これよりマシだ(少なくともシンタックスにおいて)。”

“後方互換性への最優先の要求のために、Javaにおいて、真にエレガントなことをするのが不可能になってしまう、しかし、これは、今日、単につまらないこと、と考えることができる。”

Baptiste Wichtのブログ投稿

“(初めてシンタックスを見たときに)ショックだったのは、1行目のint i1 = #()(3).(); を見たことだ。一目、完全に暗号化しているように見えた。”

“確かに改善の余地がある。もしadder.(1, 2)なくadder(1, 2)ならもっと読見やすいと思う。間のドットは、Javaぽっくない。”

Hacker News

“このシンタックスじゃ、美人コンテストに勝てないね。”

“Javaは、実際のところ、非常に「シンボリー」ではない。なぜそのような変な選択をしたのか、わかりますか?私は、反対なのではありません(私は、一般に長ったらしい言葉よりシンボルのが好きです。たとえ学ぶのに少々時間がかかってもね)、しかしこれは、Javaのスペックの他の部分とは、似ていません。”

一方、 Nick Wiedenbrueck氏は、この提案は、長い期間にわたって入手できたので、 Javaコミュニティは、何が来るのかわかっているはずだった、と感じている:

いくつかの提案があり、 straw-man 提案、スペックのドラフトそして先の Devoxxで発表がありました。しかしコミュニティで議論があまりありませんでした。その理由はなんでしょうか? いくつか仮説があります。Project Lambdaがあまりに静かすぎた?ブログの投稿や例がたくさんなかった。あるいは、コミュニティで破綻するものがあったのでしょうか?コミュニティ リーダは、いましたよね?彼らは、Scalaを学習するのに忙しすぎた?あるいは、静的な型づけされた言語では、クロージャは、本質的に複雑であるだけですか?

最後に、プロトタイプの作成者の一人である Brian Goetz氏は、 このシンタックスは、製品化される前に、将来改善されるだろう、とコメントしている:

これは、早期の実際に可能であるこ とを示す スナップショット版だ、ということをわかってください。ここに示されたシンタックスは、全く暫定的なもので、 Project Lambdaが進に連れて、改修されていきます。当面の間 、シンタックスよりずっと重要な課題があります。それらが解決するまで我々は、そちらに専念します。シンタックスは、後回しにできます。

InfoQは、Java言語のラムダ式に関する掘り下げたarticleを用意した(今のシンタックスがなぜadder(1, 2)でなくて。adder.(1, 2)なのかを含んで)。

この記事に星をつける

おすすめ度
スタイル

BT