วันอาทิตย์ที่ 3 พฤษภาคม พ.ศ. 2558

Defining class in Scala (Part 3)

หลายคนคงจะสงสัยว่าถ้าเราประกาศ class ที่ใช้สร้าง immutable object แล้ว constructor จะเป็นอย่างไร เราลองมาดูตัวอย่างต่อไปนี้ เมทธอด main จะพิมพ์  1, 2 --> green ออกมา

class Point(val x: Int, val y : Int) {
   var color: String = _
 
   if (x==0)
     color = "red"
   else
     color = "green"
 
   def print() = {
     println(s"${this.x}, ${this.y} --> ${this.color}")
   }
}

object Hello {
  def main(args: Array[String]) {
    val p1 =new Point(1,2)
    p1.print()
  }
}


Scala รันโค๊ดบรรทัดต่างๆ ที่ไม่ได้ถูกประกาศไว้ในเมทธอดใดๆเลย เหมือนกับเป็น default constructor แต่อย่างไรก้อตามเพื่อให้โค๊ดอ่านได้ง่ายขึ้นเราอาจจะทำอย่างนี้ก้อได้

1: class Point(val x: Int, val y : Int) {
2:   private var color: String = _
3:  
4:   this.init()
5:
6:   private def init() {
7:     if (x==0)
8:       this.color = "red"
9:     else
10:      this.color = "green"
11:   }
12:  
13:   def print() = {
14:     println(s"${this.x}, ${this.y} --> ${this.color}")
15:   }
16:}

แทนที่เราจะมีโค๊ดกระจัดกระจายไปทั่ว เรารวมเอาไว้ในเมทธอดที่ชื่อว่า init แล้วเรียกใช้แทนในบรรทัดที่ 4

อีกอย่างหนึ่งจะสังเกตุได้ว่าเราใช้  this.x, this.y และ this.color ถึงแม้ว่าจะประกาศกันคนละวิธีแต่ทั้งสามก้อเป็น instance member เหมือนกันหมด

เรื่องต่อไปเราจะมาดูเรื่อง inheritance ใน Scala กันต่อครับ

ไม่มีความคิดเห็น: