Scala Parametric Fields - 參數型資料成員

Parametric Fields

Scala 把建構子參數列中的參數,直接視為物件的欄位,稱做 parametric fields

因為常常 constructor 的參數目的,通常都是要用來初始化物件中的某一個欄位。然而參數都要取一個可以好好描述欄位名稱,又不會跟欄位名稱撞名的名字。這樣子的情境出現了重複與不必要,容易產生錯誤,是一個 code smell

Parametric Fields
class Zoo(
  cat: String, // default 是 private x val 。因為只有暫時使用的意思
  val dog: Int,  // 加了 val 或是 var,預設將是 public。因為有 definition 的意圖。
  var horse: Float, 
  private val pony: Double, // 要加 access flag,一定要有 val 或是 var 的前綴詞
  protected var unicorn: Short
  )
{
  val Snake: Byte = 1 // 不在建構子參數列的 data member 一定要有初始值
}
等價的 C++ Class
class Zoo
{public:
  Zoo(
    const String& param1,
    const Int& param2,
    const Float& param3,
    const Double& param4,
    const Short& param5
  ):
    cat(param1),
    dog(param2),
    horse(param3),
    pony(param4),
    unicorn(param5),
    Snake(1)
  {}  
private:    const String cat;   // no prefix
public:     const Int dog;      // val
public:     Float horse;        // var
private:    const Double pony;  // private val
protected:  Short unicorn;      // protected var
public:     const Byte Snake;         // non parametric fields, val
};

Reference Link

http://www.artima.com/pins1ed/composition-and-inheritance.html#10.6

comments powered by Disqus