2012-09-23 55 views
36

我正在考慮在播放1.2後遷移到播放2.0。有一件令我困擾的事情是人們說Scala對Play 2.0應用程序更「偏愛」。我知道,在1.2和2.0的區別,但我如果有使用Java播放2.0之間的差異和不確定使用Scala玩2.0 + Java與Play 2.0 + Scala?

播放2.0

因此,有在我腦海裏的問題:

  • 有什麼,我無法使用java在scala上玩Play 2.0應用程序?
  • 如果我開始在 play 2.0應用程序中學習和使用scala,我有什麼優勢?

回答

25

我剛剛完成了一個使用Play 2.0與Java的原型,現在正考慮學習Scala,所以我可以切換到它進行進一步的開發。

這不僅僅是通常的Java與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看起來更短,更容易閱讀。

12

AFAIK,最好和Scala一起去,因爲它提供了更多的功能。例如(糾正我,如果我錯了),你可以直接使用與Scala(又名反應式編程)的Iteratees,但我不知道如何用Java來實現這一點。

另外,Play的Java API是Play架構中的上層,核心是用Scala編寫的;所以如果你想要傾斜內部發生的事情,那就去看Scala吧。

並且還要注意,您可以在同一個Play項目中混合使用Java和Scala,因此您可以順利移動到Scala。

+0

Iteratees看起來相當intresting和Scala代碼看起來非常緊湊 – dreampowder

+0

可以肯定,Scala是比Java更簡潔:-)你也可以看看這個:http://stackoverflow.com/questions/727078/whats-so-great-about-scala –

+3

@dreampowder事實上,AFAIK迭代可能只有一個缺少的功能在Java版本,其他元素在兩種語言中都非常相似。所以,如果你對Java更加熟悉,你可以保持這一點,並只用於缺少部分的Scala。如果你沒有偏好......你需要檢查自己哪種語言對你更好。 – biesior

4

我是Play新手,剛剛寫了一箇中等規模的Java項目。

它的工作原理和功能強大,但很多功能似乎都是以Scala爲中心的,而且Java支持不足。 Java API Doc幾乎是不存在的,這在IDE(IntelliJ - 我推薦它)中帶來一些舒適。 Java世界中的集成不是很「自然」(SBT ..),它不會構建爲war或maven模塊(但似乎有插件可以做到這一點)。您可能會放棄現有Java工具的好處。

區分Play和其他框架的概念幾乎都是scala native,Java是第二個。

我偶然發現了一些錯誤和怪癖,並且我總是會以Scala代碼結束,我必須閱讀並理解它才能修復或解決此問題。 (Action,RequestBody stuff,Async,routes,template implicits等)

因此,事情的Java方面對我來說只是第二層,儘管他們顯然正在努力讓它們同樣好。

現在,在項目之後,我會說它非常有用,甚至會再次使用它(用Java)。

+2

是的,似乎每當我爲Google Play提供幫助時,我總是會在Scala中獲得示例。 – djangofan

3

什麼優勢做我,如果我開始學習和使用Scala的一齣戲 2.0應用程序?

正如djangofan評論說的,當您在Google上播放幫助時,您會在Scala中獲得示例。

在Play 2.0 應用程序中,有什麼我不能用java在scala上完成的嗎?

但是,我還沒有(還是一個初學者)發現了一個相當於Scala的Ebean。我發現的Scala示例都使用直接SQL進行持久化。數據庫的抽象在哪裏?

因爲我還沒有發現使用Scala播放數據庫抽象,我與Java繼續...

+1

我也在同一條路上。仍然從Java。自從我提出這個問題以來,他們也改進了java文檔。 – dreampowder

+0

如果您偏​​好性能而非方便,則使用直接SQL是一種優勢。 – Josef

+1

這就像是說如果你喜歡性能超過便利程度,使用匯編程序比C#更具優勢......確保有時間和地點,但不適用於一般的應用程序編碼。 – GreenAsJade