Xtendに触ってみる その8 Xtendの標準ライブラリ

Xtendを触ってみるシリーズも今回で最終回(の予定)です。今回はXtendで標準で提供されているライブラリについてです。といっても別に特別なものではなく、Xtendでコードを書く上で便利そうなライブラリがJavaで実装されているだけです。Xtendの標準ライブラリはorg.eclipse.xtext.xbase.libパッケージで提供されており、importしなくても利用できます。
まずはInputOutputクラスで定義されているprint、printlnメソッドです。普通のstaticメソッドです。なんてことのないメソッドですが、このおかげで標準出力への出力を以下のように簡単に記述することができます。

print("test")
println("test")

次は拡張メソッドによって既存のクラスに便利メソッドを追加するというもの。StringExtensionsなどで定義されているstaticメソッド(拡張メソッド)によってStringなど基本的なクラスに様々な便利メソッド演算子が追加されます。

// nullもしくは空文字かどうかのチェック
val String str = ...
if(str.isNullOrEmpty){
  ...
}

Xtendの==演算子は参照または値のいずれかが等しければtrueを返しますが、これもObjectExtensionsのoperator_equalsメソッドが以下のように定義されているからです。

public static boolean operator_equals(Object a, Object b) {
  if (a == b)
    return true;
  if (a == null)
    return false;
  return a.equals(b);
}

最後はコレクションリテラルです。まあリテラルと言ってもCollectionLiteralsで定義されているコレクションを簡単に生成するためのファクトリメソッドを使うだけですが…。こんな感じで使います。

// ArrayList<String>を生成
val list = newArrayList("A", "B", "C")

// HashMapの生成
val map = newHashMap("key1" -> "value1", "key2" -> "value2")

ちなみに上記の例で使っている->はObjectExtensionsで定義されているoperator_mappedToという拡張メソッドで、Pairのインスタンス(PairもXtendの標準ライブラリに含まれるクラスです)を生成するためのものです。
というわけで、Xtendを触ってみるシリーズは今回で終了…のつもりだったのですが、そういえばカリー化とかわすれてた(というか、ライブラリを見るまでできることを知らなかった)ので、もう少しだけ続くかもしれません。