วันพฤหัสบดีที่ 30 เมษายน พ.ศ. 2558

Defining class in Scala

บทความในโพสนี้เป็นเรื่องการประกาศ class และการสร้าง instance ครับ ภาษา Scala เป็นทั้ง Object Oriented แหละ Functional  ดังนั้นเราควรทำความรู้จักกับวิธีการสร้างและนำไปใช้  เนื่องจาก blog นี้ผมตั้งใจจะเน้นเรื่องภาษาอย่างเดียว  ดังนั้นจะขอไม่ลงรายละเอียดเกี่ยวกับเรื่อง Object Oriented Programming

การประกาศ class ใน Scala ทำได้ดังนี้
class Point {
    var x;   //public
    var y;  ///public
}

ในกรณีนึ้เราประกาศ class Point ที่มี x และ y เป็นสมาชิกอยู่ ​(instance member)  x และ y เป็น public โดยอัตโนมัติ  ดังนั้นเราสร้างเข้าไปเปลี่ยนแปลงค่า x และ y ได้ เช่น

def main(args: Array[String]) {
    val p = new Point()  //สร้าง instance ของ Point
    p.x = 10
    p.y = 20
  }

เราสามารถประกาศ constructor ให้กับ class ได้โดยต่อไปนี้

จากในรูปจะเห็นว่าเราสร้าง instance ของ Point มาสองตัวคือ p และ p1  โดยที่เรา กำหนดค่า x กับ y ของ p หลังจากสร้าง instance

val p = new Point() //สร้าง instance
p.x = 10  //set x เป็น 10
p.y = 20  //set y เป็น 20

สำหรับ p1 เราหนดค่าเริ่มต้นให้กับ x และ y ตอนสร้าง instance เลย

val p1 =new Point(1,2)

    
ทีนี้มาดูวิธีประกาศ constructor กัน

class Point {
   var x : Int = _
   var y : Int = _
   
   def this(x:Int, y:Int) {
     this()  //จำเป็นต้องเรียก default constructor ในบรรทัดแรก
     this.x = x
     this.y = y
   }
}

เราประกาศ constructor เหมือนกันกับ เมทธอด แต่ใช้ชื่อว่า this  รวมถึง x:Int และ y:Int เป็น parameter  
สังเกตุว่าเราต้องเรียก default constructor --> this() ในบรรทัดแรก ไม่เช่นนั้นจะ compile error
เราไม่จำเป็นต้องประกาศ default constructor เพราะ Scala จะทำให้เราโดยอัตโนมัติ

สำหรับตัวอย่างต่อไปนี้ เราประกาศ contructor ที่รับแค่ x:Int  เราไม่ได้เรียก default constructor แต่เรายังจำเป็นที่จะต้อง เรียก constructor ตัวใดตัวนึงอยู่ดี

class Point {
   var x : Int = _  //set ค่าเริ่มต้นของ Int (0)  ให้ x
   var y : Int = _

   def this(x:Int) {
     this(x, 1) //เรียก constructor อีกตัวหนึ่ง
   }

   def this(x:Int, y:Int) {
     this()  //จำเป็นต้องเรียก default constructor ในบรรทัดแรก
     this.x = x
     this.y = y
   }
}

ในเมทธอด main  เราพิมพ์ค่าของ x และ y จาก ออกมาหลังจากรันโปรแกรม

x:10, y:20

x:1,  y:2

สังเกตุว่า การใช้ println เราสามารถใช้ variable ใน string ได้โดยการใช้

s"...${x}...."  โดยที่ x เป็นตัวแปร  และเราต้องมี s นำหน้า "" ในตัวอย่างของเราใช้

val p1 =new Point(1,2)
println(s"x:${p1.x}, y:${p1.y}")    

สำหรับการประกาศ  x และ y ใน class Point จะสังเกตุได้ว่าเราใช้

var x : Int = _

โดยที่ _  เป็นค่าเริ่มต้นของ Int    สมมิตว่าเราประกาศค่า boolean ดังนี้

var a : Boolean = _

a จะเก็บค่าเริ่มต้น (default value) ของ Boolean นั่นก้อคือ false นั่นเอง

สำหรับบทความต่อไปเรายังคงดูเรื่อง class และ instance กันต่อไปครับ

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