狠狠撸

狠狠撸Share a Scribd company logo
Xtend
Javaの未来を今すぐ使う
ながぬまたつみ
Xtend



        プログラミング言语
齿迟别苍诲の特徴


    Java VMで動く

   文法は Java + α
齿迟别苍诲の説明


      というわけで、
       Java を
  知っている前提で話をします。
齿迟别苍诲の説明


      というわけで、
       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
●   アノテーション
●   ジェネリクス
文法

型システムの便利な機能
型推論
// Xtend
var strs = new ArrayList<String>
// Java
ArrayList<String> strs
     = new ArrayList<String>();
  // = new ArrayList<>(); Java 7
文法

型システムの便利な機能
final
// Xtend
val strs = new ArrayList<String>

// Java
final 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

// Java
private 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? とか
文法
switch
def func(Object x) {
  switch (x) {
    case 1: print('1')
    String case x.length > 2:
      print('2')
    List<?>: print('3')
    default: print('-1')
  }
}
文法

クラスとインターフェイス
Javaと同じクラスベースの
オブジェクト指向
● クラスは public のみ
● 1つの xtend ファイルに複数のクラス
文法

ラムダ
button.addActionListener(
  [ ActionEvent e |
       print('''?e.ID? clicked.''')
  ])
// ほかにこんな書き方も

button.addActionListener [
  print('''?it.ID? clicked.''')
]
文法

メソッド
● メソッドの定義は def で始まる
● デフォルトは public
● いろいろ省略可能
  ○ return
  ○ 戻り値型
  ○ 呼び出し()
文法

メソッドの便利な書き方
// Xtend
def add(int x, int y) {
  x + y
}
// Java
public int add(int x, int y) {
  return x + y;
}
ライブラリ
Javaのすべてのライブラリを
シームレスに使える
● Xtend から Java
● Java から Xtend
独自ライブラリ
// Xtend
val map = newHashMap("x" -> 1,
                     "y" -> 2)
print(map.get("x")) // 1
// Java
HashMap<String, Integer>
  map = new HashMap();
map.put("x", 1); // 以下略
使い方


● 文法
● 使い方
● デモ
セットアップ
1. Eclipse をインストール
   ○ Eclipse は必須ではない
   ○ Maven でも使える

2. Xtend プラグインをインストール
   ○ Eclipse Marketplace から
齿迟别苍诲の环境を整える
齿迟别苍诲の环境を整える
齿迟别苍诲の环境を整える
単体テスト
テスト対象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 Calculator
cal.mem = 10
assertEquals(12, cal.add(2))
assertEquals(14, cal.add(2))
まとめ

● Xtend は簡単で便利
  ○ Java から始められる
  ○ こうなったらいいなという機能
  ○ 完成度の高い開発環境

● テストから導入してみては
以上です



      ありがとうございました

 http://www.eclipse.org/xtend/
そして闯苍补谤颈辞へ続く...?




           TO BE CONTINUED...

More Related Content

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