web-dev-qa-db-ja.com

2.0 + Javaを再生するか、2.0 + Scalaを再生するか?

Play 1.2の後に2.0に移行することを考えています。私が気になることの1つは、人々がScalaはPlay 2.0アプリケーションの方が「好ましい」と言うことです。私は1.2と2.0の違いを知っていますが、Playに違いがあるかどうかわかりません2.0 JavaおよびPlay 2.0 with Scala

だから私の心には疑問があります:

  • Play 2.0アプリケーションでJava over scalaを使用して、私ができないことはありますか?
  • Play 2.0アプリケーションでscalaを学び、使用し始めた場合、どのような利点がありますか?
36
dreampowder

Play 2.0とJavaを使用してプロトタイプを完成させたところですが、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による作業の判読不能なブロックになってしまいました。

残念ながら、私はScalaで応答を組み合わせる例を見つけることができません。少なくとも単一の ScalaのWebサービス を呼び出すと、はるかに短くて読みやすくなります。

25
kapex

私の知る限り、より多くの機能を提供するため、Scalaを使用することをお勧めします。

たとえば(私が間違っている場合は訂正してください)、= Iteratees とScala(aka反応型プログラミング))を直接使用できますが、方法はわかりませんJavaでそれを実現します。

また、Java PlayのAPIはPlayアーキテクチャの上位層であり、コアはScalaで記述されているため、内部で起こっていることを学習したい場合はScalaを使用してください。

また、同じPlayプロジェクトでJavaとScalaを混在させることができるため、Scalaにスムーズに移行できることにも注意してください。

12
ndeverge

私はPlayを始めたばかりで、Javaの面で中小規模のプロジェクトを書いただけです。

これは機能し、強力ですが、多くの機能は非常にScala中心であり、Javaのサポートは標準以下です。 Java AP​​I Docは事実上存在しないため、IDE(IntelliJ-私はそれをお勧めします)の快適さが失われます。 Javaの世界での統合はあまり「自然」ではありません(SBT ..)。これはwarまたはmavenモジュールとしてビルドされません(ただし、これを行うプラグインがあるようです)。既存のJavaツールの利点をある程度失うことになります。

Playを他のフレームワークと区別する概念は、ほとんどすべてがscalaネイティブで、Java秒であるように見えます。

私はいくつかのバグや癖に出くわしましたが、いつでもScalaのコードになってしまい、修正または回避するために読んで理解する必要がありました。 (アクション、RequestBodyスタッフ、非同期、ルート、テンプレートの暗黙など)

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

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

4
sleeplessnerd

Play 2.0アプリケーションでscalaを学び、使用し始めた場合、どのような利点がありますか?

Djangofanがコメントしたように、GoogleでPlayヘルプを検索すると、Scalaの例が表示されます。

Play 2.0アプリケーションでJava over scalaを使用して、私ができないことはありますか?

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

Play with Scalaのデータベース抽象化を見つけられなかったので、Javaを続行しています...

3
GreenAsJade