24. 第1部:JavaとScala - REPL
コマンドラインでScalaプログラムを実行できる機能
Scalaをインストールすれば使うことができる
ちょっとした動作確認をするときなど便利
$ scala
Welcome to Scala version 2.10.3 (Java HotSpot(TM) Client VM, Java 1.7.0_55).
Type in expressions to have them evaluated.
Type :help for more information.
scala> 1 + 1
res0: Int = 2
scala>_
40. Java 第1部:JavaとScala - 制御構文
Javaのswitch~caseで書いた例
String name = "シャア・アズナブル";
switch (name) {
case "シャア・アズナブル":
System.out.println("ジオン公国軍"); break;
case "アムロ・レイ":
System.out.println("地球連邦軍"); break;
default:
System.out.println("民間人"); break;
}
41. Scala 第1部:JavaとScala - 制御構文
Scalaのmatch~caseだとこう
あまり変わりないけど...
val name: String = "シャア・アズナブル"
name match {
case "シャア・アズナブル" => println("ジオン公国軍")
case "アムロ・レイ" => println("地球連邦軍")
case _ => println("民間人")
}
42. Scalaのmatch~caseは型でもパターンマッチ出来た
り...
abstract class MS(val name: String)
class NewGundam(override val name: String) extends MS(name)
class Sazaby(override val name: String) extends MS(name)
class Unicorn(override val name: String) extends MS(name)
def matcher(ms: MS) = ms match {
case mss: NewGundam => println(mss.name + " by ニューガンダム")
case mss: Sazaby => println(mss.name + " by サザビー")
case _ => println("所属不明機")
}
Scala 第1部:JavaとScala - 制御構文
43. Scala 第1部:JavaとScala - 制御構文
他にも柔軟なパターンマッチを実現することができ
たり
List.range(1, 10) foreach { i =>
(i % 3, i % 5) match {
case (0, 0) => println("FizzBuzz")
case (0, _) => println("Fizz")
case (_, 0) => println("Buzz")
case _ => println(i)
}
}
134. Java 第2部:Play Framework
プロジェクトの作成、起動
作成するプロジェクトの形式を選択する
例ではScalaを選択
Scala
~割愛~
Choose from these featured templates or enter a template name:
1) minimal-java
2) minimal-scala
3) play-java
4) play-scala
(hit tab to see a list of all templates)
> 4
135. 第2部:Play Framework
プロジェクトの作成、起動
アプリケーション名を入力する
例では「My App」を入力
Scala Java
~割愛~
Enter a name for your application (just press enter for 'play-scala')
> MyApp
OK, application "MyApp" is being created using the "play-scala" template.
~割愛~
136. Scala Java
第2部:Play Framework
プロジェクトの作成、起動
作成された「My App」ディレクトリに移動し
「activator run」コマンドを実行して移動
$ cd MyApp/
$ activator run
~割愛~
[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
168. Java 第2部:Play Framework
DB操作- 親テーブル定義例
@Entity
public class Parent extends Model {
private static final long serialVersionUID = 1L;
@Id
public Long id;
@Required
public String name;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "parent")
public List<Child> child = new ArrayList<Child>();
protected Timestamp createDate;
@Version
protected Timestamp updateDate;
public static Finder<Long,Parent> find = new Finder<Long,Parent>(Long.class, Parent.class);
}
169. Java 第2部:Play Framework
DB操作- 子テーブル定義例
@Entity
public class Child extends Model {
private static final long serialVersionUID = 1L;
@Id
public Long id;
@Required
public String name;
@ManyToOne
@JoinColumn(name = "child")
public Parent parent;
protected Timestamp createDate;
@Version
protected Timestamp updateDate;
public static Finder<Long,Child> find = new Finder<Long,Child>(Long.class, Child.class);
}
170. Java 第2部:Play Framework
DB操作
play runすると、
conf¥evolutions¥default¥1.sql
を作成してくれる。
Ebeanの良いところ。
171. Java 第2部:Play Framework
DB操作
実際のデータ取得は、先のモデルクラスに定義した
public static Finder<Long,Parent> find
= new Finder<Long,Parent>(Long.class, Parent.class);
を使用する。