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