ここで定義しているコントローラークラス「
Application」には、「
index」というメソッドが用意されています。が、このメソッド、なんだか不思議な形を指定ますね。
def index = Action ……
というように、
def indexというメソッドの定義に
Actionというナニかを代入しているような文が続いています。これは一体、何なのでしょう?
・Actionは、関数を返す関数ここで使われている
Actionという関数は、リクエストを処理して、クライアントへのレスポンスとなる
play.api.mvc.Resultというオブジェクトを返す関数を返す働きをします。つまり、これにより「リクエストを処理してレスポンスを返す関数オブジェクト」が
indexに代入されるわけです。
ちょっとJavaの世界では考えられないアクロバットなやり方ですが、Scalaの世界では別になんの問題もありません。むしろ、必要に応じて
Action以外のさまざまな関数オブジェクトを設定したりできるわけで、より柔軟なプログラミングが可能なやり方といえそうです。
・Ok関数はResultを返すこの
Action関数では、
{}内に「
Ok(……)」といった文が書かれています。この
Okという関数は、
play.api.mvc.Resultオブジェクトを返す働きをします。正確には、「正常にリクエストが処理されたことを示す
Resultオブジェクト」を返すもの、といってよいでしょう。
・views.html.indexはレンダリング関数引数に、
views.html.index(……)という文が書かれていますが、これは、
indexというテンプレートをレンダリングした結果を返す関数です。ここでは「
views」内に
index.scala.htmlというファイルが用意されていましたね? Play Frameworkでは、アプリケーションをビルドする際、「
views」内に
○○.scala.htmlといったファイルをチェックし、自動的に
views.html.○○という関数を作成します。これを呼び出すことで、そのファイルをレンダリングした結果が受け取れるようになっているのです。
この
index関数では、引数にテキストが用意されていますが、これは
index.scala.htmlのテンプレートにこの値を渡す働きをします。
――これで、コントローラーで行われていることがどういうものか、だいたいわかってきました。まだ
Ok関数はOKじゃなかったらどうするんだ?だの、
Resultオブジェクトは一体どういうものか?だの、わからないことは山ほどあると思いますが、とりあえず「こんなふうに動いてるんだな」というぐらいの仕組みはわかってきたんじゃないでしょうか。