Upload
tatsumi-naganuma
View
3.001
Download
1
Embed Size (px)
DESCRIPTION
Javaの機能を拡張した新言語Xtendの紹介です。Eclipseで簡単に使えます。NSEG第31回勉強会(2012年9月29日)の発表資料。
Citation preview
XtendJavaの未来を今すぐ使う
ながぬまたつみ
Xtend
プログラミング言語
Xtendの特徴
Java VMで動く
文法は Java + α
Xtendの説明
というわけで、
Java を知っている前提で話をします。
Xtendの説明
というわけで、
Java を知っている前提で話をします。
(誰も知らなかったらここで終わる)
入門 Javaの場合
public class Hello { public static void main(String[] args) { final String name = args[0]; System.io.println( "Hello, " + name + "."); }}
入門 Xtend
public class Hello { def public static void main(String[] args) { val String name = args.get(0); System::io.println( "Hello, " + name + "."); }}
入門 Xtend(らしく)
class Hello { def static void main(String[] args) { val name = args.get(0) print('''Hello, «name».''') }}
つまり
Java を知っていれば簡単に始められる。
つまり
Java を知っていれば簡単に始められる。
(説明終了)
つづく
● 文法● 使い方● デモ
文法
● 文法
● 使い方● デモ
文法
型システム
Javaの型システムはすべて使える
● プリミティブ型(intなど)● クラス、インターフェイス● enum● アノテーション● ジェネリクス
文法
型システムの便利な機能
型推論
// Xtendvar strs = new ArrayList<String>
// JavaArrayList<String> strs = new ArrayList<String>(); // = new ArrayList<>(); Java 7
文法
型システムの便利な機能
final
// Xtendval strs = new ArrayList<String>
// Javafinal ArrayList<String> strs = new ArrayList<String>();
文法
型システムの便利な機能
// Java : 配列
void java_func(String[] arg){ extend_func(arg); }
// Xtend : List (auto-boxing)def extend_func(String[] arg) { print(arg.get(0)) java_func(a)}
@Property int a
// Javaprivate int a;public int getA() { return this.a; }public void setA(final int a) { this.a = a; }
文法
型システムの便利な機能
@Data class Hoge { ... }
● すべてのフィールドに final● すべてのフィールドに getter● 初期値を取るコンストラクタ● hashCode、equals(Object)● toString
文法
型システムの便利な機能
文法
文字列リテラル
" 文字列 "
' これも文字列 '
" 複数行の
文字列 "
val name = "world"print('''Hello, «name»''')// 補間 «» は補完で入力
// «FOR»...«ENDFOR» とか
def func(Object x) { switch (x) { case 1: print('1') String case x.length > 2: print('2') List<?>: print('3') default: print('-1') }}
文法
switch
Javaと同じクラスベースのオブジェクト指向
● クラスは public のみ● 1つの xtend ファイルに複数のクラス
文法
クラスとインターフェイス
button.addActionListener( [ ActionEvent e | print('''«e.ID» clicked.''')
])
// ほかにこんな書き方も
button.addActionListener [ print('''«it.ID» clicked.''')]
文法
ラムダ
● メソッドの定義は def で始まる● デフォルトは public● いろいろ省略可能
○ return○ 戻り値型○ 呼び出し()
文法
メソッド
// Xtenddef add(int x, int y) { x + y}
// Javapublic int add(int x, int y) { return x + y;}
文法
メソッドの便利な書き方
ライブラリ
Javaのすべてのライブラリをシームレスに使える
● Xtend から Java● Java から Xtend
独自ライブラリ
// Xtendval map = newHashMap("x" -> 1, "y" -> 2)print(map.get("x")) // 1
// JavaHashMap<String, Integer> map = new HashMap();map.put("x", 1); // 以下略
使い方
● 文法
● 使い方
● デモ
セットアップ
1. Eclipse をインストール○ Eclipse は必須ではない○ Maven でも使える
2. Xtend プラグインをインストール○ Eclipse Marketplace から
Xtendの環境を整える
Xtendの環境を整える
Xtendの環境を整える
単体テスト
テスト対象1(Java)
public class Calculator { public int add(int x, int y) { return x + y; }}
単体テスト
テストコード1(Java + JUnit4)
import static org.junit.Assert.*;public class Tester { @org.junit.Test public void testAdd() { Calculator c = new Calculator(); assertEquals(2, c.add(1,1)); }}
単体テスト
テストコード1(Xtend + JUnit4)
import static org.junit.Assert.*;public class Tester { @org.junit.Test def public void testAdd() { val Calculator c = new Calculator(); assertEquals(2, c.add(1,1)); }}
単体テスト
テストコード1x(Xtend + JUnit4)
import static org.junit.Assert.*class Tester { @org.junit.Test def testAdd() { val c = new Calculator assertEquals(2, c.add(1,1)) }}
単体テスト
テスト対象2(Java)
public class Calculator { protected int mem = 0; public void setMem(int mem) { this.mem = mem; // setter } public int add(int x) { return mem += x; }}
単体テスト
テストコード2(Java)
Calculator cal = new Calculator();cal.setMem(10);assertEquals(12, cal.add(2));assertEquals(14, cal.add(2));
単体テスト
テストコード2(Xtend)
val cal = new Calculatorcal.mem = 10assertEquals(12, cal.add(2))assertEquals(14, cal.add(2))
まとめ
● Xtend は簡単で便利○ Java から始められる
○ こうなったらいいなという機能
○ 完成度の高い開発環境
● テストから導入してみては
以上です
ありがとうございました
http://www.eclipse.org/xtend/
そしてJnarioへ続く...?
TO BE CONTINUED...