36

プレイ1.2の後にプレイ2.0に移行することを考えています。私を悩ませていることの1つは、Play2.0アプリケーションにはScalaの方が「好ましい」と言われていることです。1.2と2.0の違いは知っていますが、Javaを使用したPlay2.0とScalaを使用したPlay2.0の間に違いがあるかどうかはわかりません。

だから私の心の中に質問があります:

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

4 に答える 4

25

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サービスを呼び出すと、はるかに短くて読みやすくなります。

于 2012-09-23T14:29:23.540 に答える
12

AFAIK、Scalaを使用することをお勧めします。これは、より多くの機能を提供するためです。

たとえば(私が間違っている場合は訂正してください)、Iteratees with Scala(別名リアクティブプログラミング)を直接使用できますが、Javaでそれを実現する方法がわかりません。

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

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

于 2012-09-23T12:13:50.260 に答える
4

私はPlayを初めて使用し、Java側を使用して中小規模のプロジェクトを作成しました。

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

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

私はいくつかのバグや癖に遭遇し、それを修正または回避するために読んで理解しなければならないScalaコードにいつも行き着きました。(アクション、RequestBodyのもの、非同期、ルート、テンプレートの暗黙など)

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

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

于 2012-09-24T19:42:20.110 に答える
3

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

djangofanがコメントしたように、Playヘルプをグーグルで検索すると、Scalaで例を取得できます。

Play2.0アプリケーションでJavaoverScalaでできないことはありますか?

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

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

于 2013-12-30T00:39:44.863 に答える