Javaでソフトウェアを開発している人にとって、Xtendは導入の検討に値する言語処理系です。
沢山の言語やフレームワークがある現在、Javaよりも開発しやすい言語の選択肢は沢山ありますが、にも拘らずJavaを採用しているのには、他の言語を採用できないそれなりの理由があると思います。
Xtendは、Javaのソースを生成する言語処理系であり、Javaを置き換えるものではないため導入の障壁が低く、しかもJavaの多くのものをそのまま利用しているため、学習コストがとても低いというのが、魅力です。
Xtend == Java + α != 新言語
Xtendは独立した新言語というより、Java言語のエクステンションです。Xtendは、Javaプロジェクトの中で、Java言語と一緒に使います。
Xtendは、XtendクラスをJavaクラスのソースに変換します。
Xtendは、Javaのインタフェース、列挙、アノテーションなどは、そのままの形で利用します。
Xtendの考えは、Javaのインタフェースなどの要素は十分簡潔かつパワフルであり、複雑冗長になりがちなクラス実装記述さえ簡潔に置き換えれば、Javaの開発効率は大幅に改善できる、というものです。
このように、XtendはJavaのクラス実装しか置き換えないため、その習得は、新しい言語処理系をまるまる学習するよりも、はるかに容易です。
「Javaクラスの簡潔な書き方を覚える」という、とても軽い気持ちで学ぶことができるんです。
Hello Xtend !
Xtendを始めるのは、とっても簡単です。
Eclipseを用意すれば、以下の要領ですぐに始められます。
- Eclipse MarketplaceからXtendをインストールする
- Javaプロジェクトを作る
- Xtendクラスを新規作成
srcフォルダにXtendクラスを作ります
[File]/[New]/[Xtend Class] -> Name: HelloXtend - Xtendライブラリをビルドパスに追加する
Xtendエディタ上のビルドパスエラーを、Ctrl + 1でQuickFixします - xtend-srcフォルダにJavaソースが生成されていることを確認
- Xtendクラスを編集する
- Javaソースも生成されていることを確認
- HelloXtend.xtendをJavaアプリケーションとして実行
- 実行結果を確認
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class HelloXtend { | |
def static void main(String[] args) { | |
println("Hello Xtend") | |
} | |
} |
クロージャの例
Hello Xtendの例だけでは、Xtendの魅力が全く伝わらないですよね。
せっかくなので、Xtendのクロージャの例を見てみましょう。
コレクションのフィルタ処理が、簡潔に記述できることが分かると思います。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.List | |
import static extension java.util.Collections.* | |
class CollectionFilter { | |
def static void main(String[] _) { | |
val values = newArrayList(1, 5, 0, -2, -10, 4) | |
val filtered = positiveOnly(values) | |
println(filtered) | |
} | |
def static positiveOnly(List<Integer> values) { | |
values.filter(v| v > 0) | |
} | |
} |
生成されるJavaソースの例
この時に生成されているJavaソースは以下のような感じです。
Xtendでのクラス実装がJavaソースにコンパイルされていることがわかります。
Xtendのトリックも、ちゃんとJavaコードになっています。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.ArrayList; | |
import java.util.List; | |
import org.eclipse.xtext.xbase.lib.CollectionLiterals; | |
import org.eclipse.xtext.xbase.lib.Functions.Function1; | |
import org.eclipse.xtext.xbase.lib.InputOutput; | |
import org.eclipse.xtext.xbase.lib.IntegerExtensions; | |
import org.eclipse.xtext.xbase.lib.IterableExtensions; | |
@SuppressWarnings("all") | |
public class CollectionFilter { | |
public static void main(final String[] _) { | |
int _operator_minus = IntegerExtensions.operator_minus(2); | |
int _operator_minus_1 = IntegerExtensions.operator_minus(10); | |
ArrayList<Integer> _newArrayList = CollectionLiterals.<Integer>newArrayList(Integer.valueOf(1), Integer.valueOf(5), Integer.valueOf(0), Integer.valueOf(_operator_minus), Integer.valueOf(_operator_minus_1), Integer.valueOf(4)); | |
final ArrayList<Integer> values = _newArrayList; | |
Iterable<Integer> _positiveOnly = CollectionFilter.positiveOnly(values); | |
final Iterable<Integer> filtered = _positiveOnly; | |
InputOutput.<Iterable<Integer>>println(filtered); | |
} | |
public static Iterable<Integer> positiveOnly(final List<Integer> values) { | |
final Function1<Integer,Boolean> _function = new Function1<Integer,Boolean>() { | |
public Boolean apply(final Integer v) { | |
boolean _operator_greaterThan = IntegerExtensions.operator_greaterThan((v).intValue(), 0); | |
return Boolean.valueOf(_operator_greaterThan); | |
} | |
}; | |
Iterable<Integer> _filter = IterableExtensions.<Integer>filter(values, _function); | |
return _filter; | |
} | |
} |
まだまだあるXtendの機能
Xtendには、クロージャの他にも、便利な機能がいくつもあります。
それらの機能が、クラス実装を簡潔にする手助けをしてくれます。
そしてそれらもまた、使うのはとても簡単なんです。
今度は、それらを紹介しようと思っています。
0 件のコメント:
コメントを投稿