Xtend - Javaの未来を今すぐ使う

3,560 views
3,415 views

Published on

Javaの機能を拡張した新言語Xtendの紹介です。Eclipseで簡単に使えます。NSEG第31回勉強会(2012年9月29日)の発表資料。

Published in: Technology

Xtend - Javaの未来を今すぐ使う

  1. 1. XtendJavaの未来を今すぐ使うながぬまたつみ
  2. 2. Xtend プログラミング言語
  3. 3. Xtendの特徴 Java VMで動く 文法は Java + α
  4. 4. Xtendの説明 というわけで、 Java を 知っている前提で話をします。
  5. 5. Xtendの説明 というわけで、 Java を 知っている前提で話をします。 (誰も知らなかったらここで終わる)
  6. 6. 入門 Javaの場合public class Hello { public static void main(String[] args) { final String name = args[0]; System.io.println( "Hello, " + name + "."); }}
  7. 7. 入門 Xtendpublic class Hello { def public static void main(String[] args) { val String name = args.get(0); System::io.println( "Hello, " + name + "."); }}
  8. 8. 入門 Xtend(らしく)class Hello { def static void main(String[] args) { val name = args.get(0) print(Hello, «name».) }}
  9. 9. つまり Java を 知っていれば簡単に始められる。
  10. 10. つまり Java を 知っていれば簡単に始められる。 (説明終了)
  11. 11. つづく● 文法● 使い方● デモ
  12. 12. 文法● 文法● 使い方● デモ
  13. 13. 文法型システムJavaの型システムはすべて使える● プリミティブ型(intなど)● クラス、インターフェイス● enum● アノテーション● ジェネリクス
  14. 14. 文法型システムの便利な機能型推論// Xtendvar strs = new ArrayList<String>// JavaArrayList<String> strs = new ArrayList<String>(); // = new ArrayList<>(); Java 7
  15. 15. 文法型システムの便利な機能final// Xtendval strs = new ArrayList<String>// Javafinal ArrayList<String> strs = new ArrayList<String>();
  16. 16. 文法型システムの便利な機能// 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)}
  17. 17. 文法型システムの便利な機能@Property int a// Javaprivate int a;public int getA() { return this.a; }public void setA(final int a) { this.a = a; }
  18. 18. 文法型システムの便利な機能@Data class Hoge { ... }● すべてのフィールドに final● すべてのフィールドに getter● 初期値を取るコンストラクタ● hashCode、equals(Object)● toString
  19. 19. 文法文字列リテラル" 文字列 " これも文字列 " 複数行の文字列 "val name = "world"print(Hello, «name»)// 補間 «» は補完で入力// «FOR»...«ENDFOR» とか
  20. 20. 文法switchdef func(Object x) { switch (x) { case 1: print(1) String case x.length > 2: print(2) List<?>: print(3) default: print(-1) }}
  21. 21. 文法クラスとインターフェイスJavaと同じクラスベースのオブジェクト指向● クラスは public のみ● 1つの xtend ファイルに複数のクラス
  22. 22. 文法ラムダbutton.addActionListener( [ ActionEvent e | print(«e.ID» clicked.) ])// ほかにこんな書き方もbutton.addActionListener [ print(«it.ID» clicked.)]
  23. 23. 文法メソッド● メソッドの定義は def で始まる● デフォルトは public● いろいろ省略可能 ○ return ○ 戻り値型 ○ 呼び出し()
  24. 24. 文法メソッドの便利な書き方// Xtenddef add(int x, int y) { x + y}// Javapublic int add(int x, int y) { return x + y;}
  25. 25. ライブラリJavaのすべてのライブラリをシームレスに使える● Xtend から Java● Java から Xtend
  26. 26. 独自ライブラリ// Xtendval map = newHashMap("x" -> 1, "y" -> 2)print(map.get("x")) // 1// JavaHashMap<String, Integer> map = new HashMap();map.put("x", 1); // 以下略
  27. 27. 使い方● 文法● 使い方● デモ
  28. 28. セットアップ1. Eclipse をインストール ○ Eclipse は必須ではない ○ Maven でも使える2. Xtend プラグインをインストール ○ Eclipse Marketplace から
  29. 29. Xtendの環境を整える
  30. 30. Xtendの環境を整える
  31. 31. Xtendの環境を整える
  32. 32. 単体テストテスト対象1(Java)public class Calculator { public int add(int x, int y) { return x + y; }}
  33. 33. 単体テスト テストコード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)); }}
  34. 34. 単体テスト テストコード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)); }}
  35. 35. 単体テスト テストコード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)) }}
  36. 36. 単体テストテスト対象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; }}
  37. 37. 単体テストテストコード2(Java)Calculator cal = new Calculator();cal.setMem(10);assertEquals(12, cal.add(2));assertEquals(14, cal.add(2));
  38. 38. 単体テストテストコード2(Xtend)val cal = new Calculatorcal.mem = 10assertEquals(12, cal.add(2))assertEquals(14, cal.add(2))
  39. 39. まとめ● Xtend は簡単で便利 ○ Java から始められる ○ こうなったらいいなという機能 ○ 完成度の高い開発環境● テストから導入してみては
  40. 40. 以上です ありがとうございました http://www.eclipse.org/xtend/
  41. 41. そしてJnarioへ続く...? TO BE CONTINUED...

×