玩 2.0+Java vs. 玩 2.0+Scala?

2022-09-01 06:05:22

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

所以我心中有一些问题:

  • 在 Play 2.0 应用程序中,有什么是我无法用 java over scala 完成的吗?
  • 如果我开始在 play 2.0 应用程序中学习和使用 scala,我有什么优势?

答案 1

我刚刚完成了一个使用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

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

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


答案 2

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

例如(如果我错了,请纠正我),你可以直接使用带有Scala的迭代(又名反应式编程),但我不知道如何用Java来实现这一点。

此外,Play的Java API是Play架构的上层,核心是用Scala编写的;所以如果你想了解里面发生的事情,那就去Scala吧。

还要注意的是,你可以在同一个Play项目中混合使用Java和Scala,这样你就可以顺利地迁移到Scala。


推荐