玩2.0 + Java与Play 2.0 + Scala?
玩游戏1.2后,我正在考虑迁移到2.0。 有一件令我困扰的事情是,人们说Scala对于Play 2.0应用程序更“偏爱”。 我知道1.2和2.0之间的差异,但我不确定Play 2.0与Java和Play 2.0与Scala之间是否存在差异
所以在我脑海里有一些问题:
- 在Play 2.0应用程序中,有什么我不能用java在scala上做的事情?
- 如果我开始在play 2.0应用程序中学习和使用scala,我有什么优势?
我刚刚使用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变得困惑,永远不知道我需要或想要使用的generics – 我总是必须手动select它们。
另外请注意,在文档中,通过删除@Override
注释,使用两个空格来缩进,整体select一个没有validation或错误恢复的非常简单的示例,使得它们看起来非常漂亮,所以它们不会使用太多的行。 我甚至不知道你可以configuration一个代码格式化程序来输出,而不会完全搞乱其他代码。
在实践中,我最终得到了一个可怕的Java-Scala可憎的块,仅仅是为了从另一个服务获取一些数据。
不幸的是我找不到在Scala中结合响应的例子。 至less在Scala中调用单个Web服务看起来要短得多,而且更容易阅读。
AFAIK,最好是与斯卡拉,因为它提供更多的function。
例如(纠正我,如果我错了),你可以直接使用Scala的迭代 (又名反应式编程),但我不知道如何用Java来实现。
另外,Play的Java API是Play架构中的上层,核心是用Scala编写的; 所以如果你想倾斜里面发生的事情,去斯卡拉吧。
另外请注意,您可以在同一个Play项目中混合使用Java和Scala,以便您顺利移动到Scala。
我是Play新手,刚刚写了一个Java中小型项目。
它工作,function强大,但很多function似乎是非常Scala为中心和Java支持是低于标准。 Java API Doc实际上是不存在的,这在IDE(IntelliJ – 我推荐它)中带来一些舒适。 在Java世界中的集成不是很“自然”(SBT ..),它不是作为战争或者Maven模块构build的(但似乎有插件可以做到这一点)。 你有一些松散的现有的Java工具的好处。
区分Play与其他框架的概念几乎都是scala native,Java是第二个。
我偶然发现了一些错误和怪癖,而且我总是会以Scala代码结束,我必须阅读和理解它才能解决或解决这个问题。 (Actions,RequestBody stuff,Async,routes,template implicits等等)
所以,Java方面对我来说只是第二层,尽pipe他们显然正在努力让它们同样好。
现在,在项目之后,我会说这是非常有用的,甚至会再次使用它(用Java)。
如果我开始在Play 2.0应用程序中学习和使用Scala,我有什么优势?
正如djangofan所评论的那样,当你在Google上玩“帮助”时,你会在Scala中得到例子。
在Play 2.0应用程序中,有什么我不能用java在scala上做的事情?
然而,我还没有(还是一个初学者)发现了相当于Scala的Ebean。 我发现的Scala示例都使用直接SQL来进行持久化。 数据库的抽象在哪里?
由于我没有findScala的数据库抽象,所以我继续使用Java …