私の所属する会社には、毎月1回「帰社日」という、社員が集まって色々なセッションを行う日があります。私は今日そこで、Xtendを紹介しました。今後Xtendの機能を紹介するとっかかりにもなりますので、そのスライド資料をここに公開しておこうと思います。
ちなみに他のセッションとして、Xtendの強力なライバルでもあり先生でもある、Groovy紹介セッションもありました。Groovy紹介セッションの後に、私のXtend紹介セッションの流れだったので、むしろ短い時間でXtendの魅力を伝えることができた気もします。
2012年1月20日金曜日
2012年1月19日木曜日
JavaをよりパワフルにするXtend
EclipseのXtextチームが、Xtendという新しいJVM言語処理系をリリースしています。
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を用意すれば、以下の要領ですぐに始められます。
クロージャの例
Hello Xtendの例だけでは、Xtendの魅力が全く伝わらないですよね。
せっかくなので、Xtendのクロージャの例を見てみましょう。
コレクションのフィルタ処理が、簡潔に記述できることが分かると思います。
生成されるJavaソースの例
この時に生成されているJavaソースは以下のような感じです。
Xtendでのクラス実装がJavaソースにコンパイルされていることがわかります。
Xtendのトリックも、ちゃんとJavaコードになっています。
まだまだあるXtendの機能
Xtendには、クロージャの他にも、便利な機能がいくつもあります。
それらの機能が、クラス実装を簡潔にする手助けをしてくれます。
そしてそれらもまた、使うのはとても簡単なんです。
今度は、それらを紹介しようと思っています。
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には、クロージャの他にも、便利な機能がいくつもあります。
それらの機能が、クラス実装を簡潔にする手助けをしてくれます。
そしてそれらもまた、使うのはとても簡単なんです。
今度は、それらを紹介しようと思っています。
登録:
投稿 (Atom)