36

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

所以我的脑海里有几个问题:

  • 在 Play 2.0 应用程序中,有什么我不能用 java over scala 做的吗?
  • 如果我开始在 play 2.0 应用程序中学习和使用 scala,我有什么优势?
4

4 回答 4

25

我刚刚使用 Java 的 Play 2.0 完成了一个原型,现在正在考虑学习 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注释、仅使用两个空格进行缩进并整体选择一个非常简单的示例而没有验证或错误恢复,因此他们不使用太多行,从而使这看起来很漂亮。我什至不确定您是否可以配置代码格式化程序来像这样输出它而不会完全弄乱其他代码。

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

不幸的是,我找不到任何在 Scala 中组合响应的示例。至少在 Scala 中调用单个 Web 服务看起来更短且更易于阅读。

于 2012-09-23T14:29:23.540 回答
12

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

例如(如果我错了,请纠正我),您可以直接将Iteratees与 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..),它不会构建为战争或 maven 模块(但似乎有插件可以做到这一点)。您有点失去了现有 Java 工具的好处。

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

我偶然发现了一些错误和怪癖,我总是会遇到我必须阅读和理解才能修复或解决它的 Scala 代码。(动作、RequestBody 的东西、异步、路由、模板隐式等等)

因此,Java 方面对我来说只是第二层,尽管他们显然正在努力使它们同样出色。

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

于 2012-09-24T19:42:20.110 回答
3

如果我开始在 play 2.0 应用程序中学习和使用 scala,我有什么优势?

正如 djangofan 评论的那样,当您在 Google 上寻求 Play 帮助时,您会在 Scala 中获得示例。

在 Play 2.0 应用程序中,有什么我不能用 java over scala 做的吗?

但是,我还没有(仍然是初学者)为 Scala 找到等效的 Ebean。我发现的 Scala 示例都使用直接 SQL 来实现持久性。数据库抽象在哪里?

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

于 2013-12-30T00:39:44.863 回答