C12.Effective Scala

老魚試著結合 Effective Java, 2nd Edition 來撰寫 Effective Scala ...

Scala 本來就可以完全融合 Java APIs, 故沒何任理由, 要惕除您原有累積的 Java Know-How, 相對的 Scala 讓您更正視看待對 JRE/JVM 性能要求.




Java:所有的equals方法实现都是错误的?(1)
Class java.lang.Object 定义了一个 equals 方法,其中的子类可以进行改写(override)。不幸的是,最终的结果表明,在面向对象语言中,编写正确的等值方法相当困难。事实上,在对 Java 代码的大量正文进行研究之后,几位作者在 2007 年的一份论文中作出如下结论:几乎所有 equals 方法的实现都是错误的。这是一个严重的问题,因为等值方法是很多代码的根本。



Chapter 8 通用程序設計(General Programming)


Item 46: foreach 迴圈優先傳統(for)迴圈


VS. for-each 迴圈優先於傳統(for)迴圈 - Effective Java, Item 46: Prefer for-each loops to traditional for loops
  • 相較 Effective Java 提出的理由, 為求簡潔性和預防 Bugs, 在 Scala 中完全適用, 但 Effective Java 最後提出三點在 Java 無法使用 for-each 上的缺陷, 在 Scala 上阻礙變的更小.
    • 過濾(Filter)
    • 轉換
    • 平行迭代


Item 49: 創建實例時偏好 val 優先於 var


VS. 基本型別優先於基本型別裝箱的類別 - Effective Java, Item 49: Prefer primitive types to boxed primitives.
  • Effective Java 對這點的最大建議, 出因於 Java 本身混搭著非 OO 的 Primitive Types, 並在 Java 1.5 時新增其 autoboxing / auto-unboxing, 故提出的建議使用情況的在時間與空間上做最佳取捨.
  • Scala 是純 OO 的語言特性, 實質上並無原書 Item 49 的問題考量, 但這不表示 Scala 放棄了性能問題, 相反的更以不可變的宣告句 val (同如 Java 中的 final 宣告), 來創建 AnyVal 的不同子物件類型, 此架構設計優於 Java 的 Primitive Types.


Item 50: 如果其它類型更適合, 應盡可能避開使用 String. (EJ)



  • 又可以稱為"硬編碼".
  • 這一條老魚認為它不只是 JAVA 要求這點, 在其它的編程也是, 盡可能的重構和減少在處於非變數宣告區以外的位置, 撰寫 String.


Comments