xtend - javaの未来を今すぐ使う

41
Xtend Javaの未来を今すぐ使う ながぬまたつみ

Upload: tatsumi-naganuma

Post on 27-May-2015

3.001 views

Category:

Technology


1 download

DESCRIPTION

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

TRANSCRIPT

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

XtendJavaの未来を今すぐ使う

ながぬまたつみ

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

Xtend

プログラミング言語

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

Xtendの特徴

Java VMで動く

文法は Java + α

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

Xtendの説明

というわけで、

Java を知っている前提で話をします。

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

Xtendの説明

というわけで、

Java を知っている前提で話をします。

(誰も知らなかったらここで終わる)

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

入門 Javaの場合

public class Hello { public static void main(String[] args) { final String name = args[0]; System.io.println( "Hello, " + name + "."); }}

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

入門 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の未来を今すぐ使う

入門 Xtend(らしく)

class Hello { def static void main(String[] args) { val name = args.get(0) print('''Hello, «name».''') }}

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

つまり

Java を知っていれば簡単に始められる。

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

つまり

Java を知っていれば簡単に始められる。

(説明終了)

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

つづく

● 文法● 使い方● デモ

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

文法

● 文法

● 使い方● デモ

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

文法

型システム

Javaの型システムはすべて使える

● プリミティブ型(intなど)● クラス、インターフェイス● enum● アノテーション● ジェネリクス

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

文法

型システムの便利な機能

型推論

// Xtendvar strs = new ArrayList<String>

// JavaArrayList<String> strs = new ArrayList<String>(); // = new ArrayList<>(); Java 7

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

文法

型システムの便利な機能

final

// Xtendval strs = new ArrayList<String>

// Javafinal ArrayList<String> strs = new ArrayList<String>();

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

文法

型システムの便利な機能

// 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の未来を今すぐ使う

@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の未来を今すぐ使う

@Data class Hoge { ... }

● すべてのフィールドに final● すべてのフィールドに getter● 初期値を取るコンストラクタ● hashCode、equals(Object)● toString

文法

型システムの便利な機能

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

文法

文字列リテラル

" 文字列 "

' これも文字列 '

" 複数行の

文字列 "

val name = "world"print('''Hello, «name»''')// 補間 «» は補完で入力

// «FOR»...«ENDFOR» とか

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

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の未来を今すぐ使う

Javaと同じクラスベースのオブジェクト指向

● クラスは public のみ● 1つの xtend ファイルに複数のクラス

文法

クラスとインターフェイス

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

button.addActionListener( [ ActionEvent e | print('''«e.ID» clicked.''')

])

// ほかにこんな書き方も

button.addActionListener [ print('''«it.ID» clicked.''')]

文法

ラムダ

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

● メソッドの定義は def で始まる● デフォルトは public● いろいろ省略可能

○ return○ 戻り値型○ 呼び出し()

文法

メソッド

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

// Xtenddef add(int x, int y) { x + y}

// Javapublic int add(int x, int y) { return x + y;}

文法

メソッドの便利な書き方

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

ライブラリ

Javaのすべてのライブラリをシームレスに使える

● Xtend から Java● Java から Xtend

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

独自ライブラリ

// 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の未来を今すぐ使う

使い方

● 文法

● 使い方

● デモ

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

セットアップ

1. Eclipse をインストール○ Eclipse は必須ではない○ Maven でも使える

2. Xtend プラグインをインストール○ Eclipse Marketplace から

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

Xtendの環境を整える

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

Xtendの環境を整える

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

Xtendの環境を整える

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

単体テスト

テスト対象1(Java)

public class Calculator { public int add(int x, int y) { return x + y; }}

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

単体テスト

テストコード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の未来を今すぐ使う

単体テスト

テストコード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の未来を今すぐ使う

単体テスト

テストコード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の未来を今すぐ使う

単体テスト

テスト対象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の未来を今すぐ使う

単体テスト

テストコード2(Java)

Calculator cal = new Calculator();cal.setMem(10);assertEquals(12, cal.add(2));assertEquals(14, cal.add(2));

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

単体テスト

テストコード2(Xtend)

val cal = new Calculatorcal.mem = 10assertEquals(12, cal.add(2))assertEquals(14, cal.add(2))

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

まとめ

● Xtend は簡単で便利○ Java から始められる

○ こうなったらいいなという機能

○ 完成度の高い開発環境

● テストから導入してみては

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

以上です

ありがとうございました

http://www.eclipse.org/xtend/

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

そしてJnarioへ続く...?

TO BE CONTINUED...