2012年5月29日火曜日

Playframework 2.0でスケジュール

こんな感じ

import play.api.libs.concurrent.Akka
import play.api.Play.current
import akka.util.duration.intToDurationInt

Akka.system.scheduler.schedule(0 seconds, 1 minutes) {
    println("test")
}


第1引数は初期遅延時間、第2引数はインターバルです。
Akkaを直で使っている感があって、どうなんよ?と思わなくもない。

「0 seconds」「1 minutes」という書き方はint型である0や1が暗黙変換関数のintToDurationIntによってDurationInt型に変換され、そこからさらにそのメソッドである「seconds」「minutes」によってDuration型に変換されるというScalaの必殺技。(^^;;;

細かいことを考えなければ便利なんだろうけど、初回使用の際にはどういう変換が行われているのかをちゃんと調べないと気持ち悪いので逆に面倒な気もしないでもない。

ちなみに暗黙変換を使用しない場合は引数は


new FiniteDuration(1, TimeUnit.MINUTES)

のようになって微妙な感じなんでAPI開発者の意図としては常に暗黙変換を使ってね、ってことなんでしょう。

最初のコードはまったくAPIを知らない状態で見てもなんとなく意味がわかるという点で優れていると思うけど、ちゃんと使いこなそうと思ったらちょっとハードル高いかなぁ。。。

書きながら気がついたけど、Playframework側でAkkaをラップしたAPIを用意しようとしても結局はAkka側の暗黙変換関数もimportしないといけないのでそれでこんな形になったのかも。

2012年5月26日土曜日

Playframework 2.0はじめました

半年振りのScala。
大分忘れてる。。。 

それを割り引いても、まだまだ1.2.4の方が2.0.1よりも使い勝手も完成度も高い気がする。
仕事で使うツールとしては当面1系からは乗り換えられないでしょう。

 とりあえずフォームからアップロードされたファイルを扱う場合のコードがPlay1に比べてホンマかいなと思うくらい冗長になることに愕然とした。

 あとはXMLの加工をどうやってやるべきか?ということに迷う。
 一発で作るならXMLリテラルはめちゃめちゃ便利だけど、多くの場合はXMLの組み立ては条件分岐しながら一部ずつ組み立てていくのでその場合どうするのがベターなのかがよくわからない。

 まぁしばらくはPlay2.0で遊んでみるので、ぼちぼちやっていきます。