Hatena::ブログ(Diary)

すにぺっと

2011-04-19

play-scalaを改めて学ぶ-6 Scalaのデータバインディング

| 01:04 | play-scalaを改めて学ぶ-6 Scalaのデータバインディングを含むブックマーク

HTTP to Scala data binding

Javaのときのように、アクションメソッド引数から直接HTTPパラメータを取得可能。

メソッドパラメータ名は、HTTPパラメータと同じになる。

ここでは、特定のScalaの型に関連する違いを説明する。


Binding Option types

HTTPパラメータはいつも値が存在するとは限らない。

そんなとき、Option型を使用すると便利。

def hello(name: Option[String]) = {
    name.map("Hello " + _ + "!").getOrElse("Please give us your name!")
}

この場合、nameパラメータがなければ、Please give us your name!が返される。


Using Scala default parameter values

HTTPパラメータがない場合に処理する別の方法は、

メソッドパラメータデフォルト値を指定すること。

def hello(name: String = "Guest") = {
    "Hello " + name + "!"
}

このデフォルトパラメータを使用する実装は、

リバースルーティングとしても使用されている。

(アクションメソッド内で転送ってことか?)

たとえば、nameパラメータを指定せずにhelloアクションにリダイレクトするようにするとこうなる。

def redirectToHello = Action(hello())

Binding case classes

メソッドパラメータとしてケースクラスを指定することによって、

より複雑なパターンマッチを簡単に判断できる。

case class User(name: String, email: String)

アクションメソッド

def hello(user: User) = user match {
    case User("guillaume", _) => "Howdy, guillaume!"
    case User(name, _) => "Hello " + name
}

バインディングルールは、JavaBeansにも適用される。

こんなかんじでアクセスすると、パラメータがbeanのプロパティ

マッピングされる。

/hello?user.name=Guillaume&user.email=gbo@zenexity.com

また、ケースクラスでデフォルトコンストラクタを定義していない場合、

自動でデフォルトコンストラクタが生成される。

しかし生成されるコンストラクタは実際には何もしない。


次はScalaでplayのテンプレートを使うの巻。


プログラミングScala
プログラミングScala
posted with amazlet at 11.04.19
Dean Wampler Alex Payne
オライリージャパン
売り上げランキング: 24883

RIREXRIREX 2014/12/18 12:20 今更ですが本当に助かりました!ありがとうございます。

トラックバック - http://d.hatena.ne.jp/sy-2010/20110419/1303229086
Connection: close