0104.給Java開發者

沒有人天生對一項新語言能在短期中成為專家, 萬丈高樓平地起, 虛心謙卑地把自己歸零來學習它, 而非自滿的誇耀自已的精通能力~WisdomFish

老魚我把自己的"挫折"學習心得留給各位來自 Java 的開發者:


萬般皆物件



  • 數值是物件, 故身上帶有許多相關的運算與其運算“符”, 所以連運算符都是方法.
  • 函數也是物件, 


單例物件取代靜態成員

  • Scala 中不存在靜態成員宣告, 無關鍵字 'static'.
  • 單例物件:一個俱唯一性的實例(Instance), 這個類別級的宣告, 在首次被執行時進行唯一性實例化. 
  • Java 在 class 中以宣告 main( ) 來做為程序的起點, 在 Scala 中制約的要求在類別層級將此宣告為單例物件, 冠以關鍵字 'object' 來替代 Java 中的關鍵字 'class'.  
  • main( ) 不返回值 (故它是一個 procedure method)

Compiling & Running

  • $ javac -> $ scalac
  • $ java -> $ scala

import Java APIs
  • Default
    • * 星號, 在 Scala 被視為有意義的方法標誌符用, 故在 Scala 中使用 _ 下劃線替代之.
    • import java.lang._
  • import ApiName._
    • 將其指定的API所帶的靜態成員(方法與欄位)可以在程序中直接被引用, 不冠以API名稱.

Class
  • Scala 的 Root classe: scala.Any
  • Scala 的類別宣告可以帶有參數, 並在實例化時進行參數的傳遞
    • Complex
  • 繼承與Override
    • 在未指定父類別的情況下, 都隱性繼承來自 scala.AnyRef (相當於 java.lang.Object 的地位)
    • 子類別可以覆寫父類別的成員, 但必須冠以 scala 語言級的關鍵字宣告 'override'
  • 泛型標誌符由 <RefClassName> 變更為 [ ] 

Interface -> Trait
  • Trait 的目標用來取代 Java interface, 但較為豐富的可以有非抽像的實作code, 可以用來當樣版或者以“組合”的概念, 來進行專案設計
  • 抽象方法不需冠以 abstract 關鍵字



Comments