Play frameworkのviewで使うScala入門

このエントリはPlay frameworkひとりアドベントカレンダーの13日目です。

昨日からviewをいじってますが、Play framework 2ではviewとして Scala を使うのです。。。

というわけでtemplateとして使う範囲で便利なScala文法について覚えましょう。 これくらいならウエッってならないと思います。たぶん。

キホンのキ

@なんとか はScalaとして解釈されるようです。

変数呼び出し

@変数名 と書くと変数が出力されます。


    
        @title
    
    
        @content
    

オブジェクトのプロパティはそのまま 変数名.プロパティ名 で呼び出せます。

@(twowa :Twowa)
  • @twowa.contents
  • オブジェクトがMapの場合、 @変数名("キー名") で呼び出せます。

    hoge.get("attr1") を呼び出す場合はこんな感じ。

    @(hoge :HashMap[String,String])
    
  • @hoge("attr1")
  • 型宣言

    Scalaの型宣言は後ろに書きます! これだけ気をつけましょう。

    @(title :String, message :String, amount :Long)
    

    List, Mapの内包型

    上でもちょっと登場しましたが、[クラス名] とか [クラス名, クラス名] とかそんなかんじ。

    @(twowas :List[Twowa], myHashMap :HashMap[String, String], twowaRanks :HashMap[String,List[Twowa]])
    

    Object型

    Any です。

    @(bucket :HashMap[String, Any])
    

    ループ

    foreach的な呼び出しが <- を使ってとてもきれいに書けます。

    @(twowas :List[Twowa])
    
    @for(twowa <- twowas){
    
  • @twowa.contents
  • }

    ちなみに回数が決まってるループも n to N を使ってきれいに書けます。

    @for(i <- 1 to 10){
      
    @i
    }

    分岐

    if です。やっぱりね。

    @if(twowa.id < 1000){
      
    初期ユーザ特典!!!
    }

    型変換(キャスト)

    @definingAny#asInstanceOf を使います。

    ややこしいですが丸暗記してください。

    @defining(.asInstanceOf[<キャスト後の型>]){ 変数名 =>
      もろもろ
    }
    
    @(twowaMap :HashMap[String, Any])
    
    @defining(twowaMap.get("selectedAt").asInstanceOf[Date]){ selectedAt =>
    
    selected at @selectedAt
    } @defining(twowaMap.get("bestTwowa").asInstanceOf[Twowa]){ bestTwowa =>

    Best Twowa

    @bestTwowa.contents by @bestTwowa.userId at @bestTwowa.createdAt
    }

    テンプレート呼び出し

    すでに @main でわかってると思いますが、 @ファイル名(引数) で呼び出せます。

    例えば main.scala.html

    @(title: String)(content: Html)
    

    なので、使うときは

    @main("title in string"){contents in html}
    

    という形。簡単ですね。
    やったねヽ(`▽´)/


    See also