2012-09-23 16 views
36

私はプレイ1.2の後にプレイ2.0に移行することを考えています。私を悩ますことの1つは、Scalaがplay 2.0アプリケーションの「優先」であると言うことです。 Play 2.0 + Java vs. Play 2.0 + Scala?

だから私の心の中で疑問がある私は、1.2と2.0以上の違いを知っているが、私は、Javaでのプレイ2.0との間に差異がある場合はわからないんだとScalaの

で2.0を再生する:

  • は何があることPlay 2.0アプリケーションでは、Java over scalaを使用できません。
  • play 2.0アプリケーションでスカラーを学習して使用するとどのような利点がありますか?

答えて

25

JavaでPlay 2.0を使用したプロトタイプを完成しましたが、今後はScalaを学習することを検討していますので、今後の開発に切り替えることができます。

通常はJava対Scalaのディスカッションだけではありません.Playフレームワークで見られるような問題は、ScalaのイディオムをJavaに強制することです。ドキュメントからの例についてcalling multiple web services

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で応答を結合する例は見つかりませんでした。少なくとも1つの電話番号web services in Scalaは、はるかに短くて読みやすくなります。

12

AFAIK、それはより多くのfunctionnalityを提供するので、それはスカラと行くことが良いです。

例えば、私が間違っている場合は私を修正してください。IterateesをScala(別名リアクションプログラミングとも呼ばれます)で直接使用することはできますが、それをJavaでどのように実現するのか分かりません。

また、PlayのJava APIはPlayアーキテクチャの上位層であり、コアはScalaで記述されています。内部で何が起こっているのかを知りたい場合は、Scalaを参照してください。

また、同じPlayプロジェクトでJavaとScalaを混在させることができるので、スカルにスムーズに移動できます。

+0

Iterateesは非常にintrestingの外観とScalaのコードは確かに – dreampowder

+0

本当にコンパクトに見えますが、ScalaはJavaのより少ない冗長です:-)あなたもこれを見てみることができます:http://stackoverflow.com/questions/727078/whats-so-great-about-scala –

+3

@dreampowder事実上、AFAIK、iterateesはおそらくJavaで欠けている機能の1つに過ぎませんバージョン、他の要素は両方の言語で非常に匹敵します。だから、もしあなたがJavaに慣れていれば、そのままで、欠けている部分だけScalaを使うことができます。あなたが環境設定を持っていない場合は、どの言語があなたにとって良いのか自分自身で確認する必要があります。 – biesior

4

私はPlayには新しく、Java側で小さなミッドサイズのプロジェクトを書きました。

これは機能し、強力ですが、多くの機能が非常にScala中心であるように見え、Javaサポートはサブパネルです。 Java API Docは事実上存在しないため、IDE(IntelliJ - 私はそれをお勧めします。 Javaの世界での統合はあまり自然ではありません。)、それは戦争またはMavenモジュールとして構築されません(しかし、これを行うためのプラグインがあるようです)。あなたは、既存のJavaツールの利点を失うことはありません。

Playを他のフレームワークと区別するコンセプトは、ほぼすべてがスカラネイティブとJavaの2番目のようです。

私はいくつかのバグや癖に遭遇しましたが、私はいつもそれを修正したり回避したりするために読んで理解しなければならないScalaコードに終わるでしょう。

Javaの側面は、私にとって非常に2番目の層であると感じていますが、明らかに同じように優れたものになるよう努力しています。

今、プロジェクトの後、私はそれが非常に使いやすく、(Javaで)それを再び使用すると言います。

+2

ええ、私はGoogle PlayヘルプのためにいつもScalaで例を得ているようです。 – djangofan

3

2.0アプリケーションでスカラーを学習して使用すると、どのような利点がありますか?

djangofanがコメントしたように、PlayヘルプのためにGoogleをご利用の場合は、Scalaで例を得ることができます。

Play 2.0 アプリケーションで、scala over scalaで行うことができないことはありますか?

しかし、私はまだ(初心者でも)ScalaのEbeanに相当するものは見つけていません。私が発見したScalaの例では、永続性のために直接SQLを使用しています。データベースの荒廃はどこですか?

私はスカラ座でプレイするためのデータベースの抽象化を発見していないので、私は、Javaを続けるよ...

+1

私も同じ道にいる。まだJavaから行く。また、私はこの質問をして以来、彼らはかなりJavaのドキュメントを改善してきた – dreampowder

+0

直接SQLの使用は、利便性よりもパフォーマンスを好むなら、利点です。 – Josef

+1

これは、便利ではなく時間と場所があることは確かですが、一般的なアプリケーションコーディングではなく、アセンブラの使用がC#より優れていると言えます。 – GreenAsJade

関連する問題