播放2.0 + Java与Play 2.0 + Scala?

时间:2012-09-23 12:04:45

标签: java scala playframework-2.0

我正在考虑在游戏1.2之后迁移到2.0。困扰我的一件事是人们说Scala对于Play 2.0应用来说更“首选”。我知道1.2和2.0之间的差异,但我不确定Play 2.0与Java和Play 2.0与Scala之间是否存在差异

所以我脑子里有些问题:

  • Play中是否有任何关于java over scala的功能 2.0申请?
  • 如果我开始学习和使用scala,我会有什么优势 玩2.0应用程序?

4 个答案:

答案 0 :(得分:25)

我刚刚使用Play 2.0和Java完成了原型,现在我正在考虑学习Scala,以便我可以切换到它进行进一步开发。

这不仅仅是通常的 Java vs. 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注释,仅使用两个空格进行缩进,并且整体选择一个非常简单的示例而无需验证或错误恢复,因此它们看起来非常漂亮,因此它们不会使用太多行。我甚至不确定你是否可以配置代码格式化程序来输出它,而不会完全搞乱其他代码。

在实践中,我最终得到了一个可怕的Java-Scala憎恶块,只是为了从另一个服务中获取一些数据。

不幸的是,我找不到任何在Scala中组合响应的示例。至少调用单个web services in Scala看起来更短更容易阅读。

答案 1 :(得分:12)

AFAIK,最好使用Scala,因为它提供更多功能。

例如(如果我错了,请纠正我),你可以直接使用带有Scala的Iteratees(也就是反应式编程),但我不知道如何用Java实现它。

此外,Play的Java API是Play架构的上层,核心是用Scala编写的;因此,如果你想要了解内部发生的事情,请使用Scala。

另请注意,您可以在同一个Play项目中混合使用Java和Scala,这样您就可以顺利地移动到Scala。

答案 2 :(得分:4)

我是Play的新手,刚刚编写了一个带有Java端的中小型项目。

它的工作原理很强大,但很多功能似乎都是以Scala为中心的,并且Java支持是低于标准的。 Java API Doc几乎不存在,这在IDE中带来了一些安慰(IntelliJ - 我推荐它)。 Java世界中的集成不是非常“自然”(SBT ..),它不构建为war或maven模块(但似乎有插件可以做到这一点)。您可以放弃现有Java工具的好处。

将Play与其他框架区分开来的概念几乎都是scala native和Java second。

我偶然发现了一些错误和怪癖,我总是以Scala代码结束,我必须阅读并理解修复或解决它。 (Actions,RequestBody stuff,Async,routes,template implicits等)

所以事情的Java方面对我来说只是感觉非常第二层,尽管他们显然正在努力使他们同样好。

现在,在项目之后,我会说它非常实用,甚至可以再次使用它(在Java中)。

答案 3 :(得分:3)

  

如果我开始在游戏中学习和使用scala,我会有什么优势   2.0申请?

正如djangofan评论的那样,当你谷歌寻求Play帮助时,你会在Scala中得到一些例子。

  

Play 2.0中是否有任何关于java over scala的功能   应用

但是,我还没有(仍然是初学者)为Scala找到了相当于Ebean的东西。我发现的Scala示例都使用直接SQL进行持久化。数据库滥用在哪里?

由于我没有找到Play with Scala的数据库抽象,我继续使用Java ...