2013-12-05

Xtend - Javaの未来を示すJava方言

Categories: Java
xtend-logo-image.png

[ PR ]


久しぶりに(初めて?)Javaの話題です。

Xtendが登場した経緯

この項は、Xtendの良さを説明する前振りなので、飛ばしてもOKです。

枯れた言語 Java

一時期には一世を風靡したJavaですが、現在のJavaは完全にApacheなどの基板をなす、"枯れた言語"になってしまいました。

JavaAppletが使われなくなって長く経ちましたが、JavaFXはRIAから撤退し、SilverlightやAdobe Flexに譲りました。クライアントサイドJavaとして歴史は完全に失敗したと言えます。

JVM言語の登場

そんな中で逆に注目されているのが仮想マシンとしての JVM(Java Virtual Machine)です。

実際にJRubyやScala、ClojureなどはJVM言語として成功をしており、Twitterなどで活躍しています。

その経緯としては、Javaが以前として古い言語仕様のままで、柔軟性を欠いているということがありますが、逆にJVMが機能が充実しているからという理由もあります。

言語としてのJavaの現状

ただ、言語としてのJava自体には、C#にも採用されているラムダ式もなければ、型推論なども存在しないため、少人数では使いにくい言語になってしまいました。

Java8以降ではそれらの機能を徐々に取り込む予定があるようですが、なかなか予定通りには進んでいないようです。


Xtend

前置きが長くなりましたが、ようやくXtendの登場ですね。

Xtendの公式サイトはeclipse.orgにあります。 http://www.eclipse.org/xtend/index.html

前述のように、Javaの言語仕様がなかなか進化しない現状があり、それを先取りしようという動きがあってできたのが、Eclipseから登場したXtendです。

どんな言語かというと、動画を見るとわかりやすいと思います。

Xtend Intro from Xtext Team on Vimeo.

"Javaっぽい" 硬い表現が、どんどん柔軟になっていくのが心地いいですね。

こうなるのは次のような理由です。 https://www.eclipse.org/xtend/documentation.html

  • 構文のシンプル化 (セミコロン不要など)
  • 拡張メソッド
  • シンタックスシュガー
  • 型推論
  • ラムダ式
  • ヒアドキュメント
  • テンプレート式
  • すべてが文ではなく式(すべての式が値を返す)
  • プロパティ
  • マクロ
  • Javaコードを出力

これらの特徴のほとんどは、スクリプト言語や関数型言語に由来するもので、Javaに比べると相当な柔軟性と効率性を持っている言語だといえます。

関数型言語の場合、例えばScalaはJavaの1/2のコード量で済むと言われているので、XtendもJavaと比べるとコード量はかなり減ると思います。

型推論、ラムダ式、「すべてが式」とは

ここで、関数型言語に由来する機能について解説しようと思います。

まず型推論とは、その名の通り型を推測する機能で、型の宣言を省略することができます。もちろん明確に宣言することもできます。

メリットは、右辺が複雑な場合に、型を考える必要がなくなります。

デメリットは、思わぬ型が推論される場合があることや、コードがわかりづらくなる場合もあるので、ケースバイケースです。

一見、型推論は関数型言語に関係ないような気がしますが、型推論はラムダ計算に由来するものです。

次にラムダ式とは、JavaScriptなどの無名関数のことです。

メリットは、様々な点でコードが簡潔になったり、引数に関数を取る(高階関数)ことでより再利用可能なコードを書くことができます。

デメリットは、コードが読みづらくなる場合があったり、複雑になりすぎる場合があります。

最後に、すべてが式ということについてですが、これは関数型言語の典型的な性質です。

関数型言語の「関数型」の意味は、先ほど説明の中にもありましたが、

関数を引数にとったり、関数を変数(定数)に格納したりでき、関数が型をもったりすること

です。これを第一級関数と言います。

この性質においては、すべての構文が値を返し、として扱えることが必要となります。

このことについては詳しくは述べませんが、関数型言語の多くが変数を扱えないことを踏まえれば、すべてが式であることが必要不可欠であるということが分かってくるかもしれません。

他のことについても解説したいところですが、詳しく書くときりがないので、実際使ってみるのが一番だと思います。

まとめ

Xtendは、Java10を先取りできる実験的なJava方言で、かなりモダンな仕様を持った柔軟な言語です。

もしこれがJava10の仕様に採用されるとすれば、早くリリースしてもらいたいものですね。

Effective Java 第2版 (The Java Series)
Joshua Bloch
ピアソンエデュケーション
売り上げランキング: 156,212

コメントはTwitterアカウントにお願いします。

RECENT POSTS


[ PR ]

.