Play 2.0とJavaを使用してプロトタイプを完成させたばかりですが、今後の開発のためにScalaに切り替えることができるように、Scalaの学習を検討しています。
これは、通常のJavaとScalaの議論だけではありません。Playフレームワークで見られる問題は、ScalaイディオムをJavaに強制することです。複数のWebサービスの呼び出しに関するドキュメントの例:
public static Result feedComments(String feedUrl) {
return async(
WS.url(feedUrl).get().flatMap(
new Function<WS.Response, Promise<Result>>() {
public Promise<Result> apply(WS.Response response) {
return WS.url(response.asJson().findPath("commentsUrl").get().map(
new Function<WS.Response, Result>() {
public Result apply(WS.Response response) {
return ok("Number of comments: " + response.asJson().findPath("count"));
}
}
);
}
}
)
);
}
動作しますが、従来のJavaのようには見えません。それらの括弧は本当に怖いように見えます。Eclipseでさえ混乱し、どのジェネリックが必要か、または使用したいかがわかりません。常に手動で選択する必要があります。
また、ドキュメントでは、@Override
注釈を削除し、インデントに2つのスペースを使用し、全体的に検証やエラー回復のない非常に単純な例を選択して、あまり多くの行を使用しないようにすることで、これをきれいに見せていることにも注意してください。他のコードを完全に台無しにすることなく、このように出力するようにコードフォーマッターを構成できるかどうかさえわかりません。
実際には、別のサービスからデータを取得するためだけに、恐ろしいJava-Scala-abominationの読み取り不可能なブロックになってしまいました。
残念ながら、Scalaで応答を組み合わせる例は見つかりません。少なくともScalaで単一のWebサービスを呼び出すと、はるかに短くて読みやすくなります。