การประกาศ 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 เลย
ทีนี้มาดูวิธีประกาศ constructor กัน
เราไม่จำเป็นต้องประกาศ default constructor เพราะ Scala จะทำให้เราโดยอัตโนมัติ
สำหรับตัวอย่างต่อไปนี้ เราประกาศ contructor ที่รับแค่ x:Int เราไม่ได้เรียก default constructor แต่เรายังจำเป็นที่จะต้อง เรียก constructor ตัวใดตัวนึงอยู่ดี
def this(x:Int) {
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)
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 อีกตัวหนึ่ง
}
ในเมทธอด main เราพิมพ์ค่าของ x และ y จาก ออกมาหลังจากรันโปรแกรม
สำหรับการประกาศ x และ y ใน class Point จะสังเกตุได้ว่าเราใช้
var x : Int = _
โดยที่ _ เป็นค่าเริ่มต้นของ Int สมมิตว่าเราประกาศค่า boolean ดังนี้
var a : Boolean = _
a จะเก็บค่าเริ่มต้น (default value) ของ Boolean นั่นก้อคือ false นั่นเอง
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 กันต่อไปครับ