วันอังคารที่ 28 เมษายน พ.ศ. 2558

Declare variable using val

เรื่องต่อไปเกี่ยวกับการใช้ตัวแปรคือ val  วิธีการประกาศตัวแปรคล้ายๆ กับ var  คือ

val [name] : [type] = [initial value]

def test() {
    val x : Int = 1
    val y : Double = 1.0
    val z  = true

}

การประกาศตัวแปรโดยใช้ val เหมือนกับการประกาศตัวแปร final หรือ readonly ใน java หรือ c# นั่นเอง  เพียงแต่เราสามารถประกาศได้ในเมทธอด หรือในคลาสก้อได้

class Point {
   val x = 10
   val y = 20
}

เราจะต้องกำหนดค่าเริ่มต้นให้เสมอ และไม่สามารถเปลี่ยนแปลงค่าหลังจากนั้นได้อีก เช่น

val x : Int = 1
// x = 10   --> compile error

ทีนี้ทำไมต้องมี val ด้วย ในเมื่อเราสามารถใช้ var ได้อยู่แล้ว   คำตอบก้อคือเราไม่อยากจะเปลี่ยนค่าอีกหลังจากกำหนดค่าเริ่มต้นเรียบร้อยแล้ว ลองมาดูตัวอย่างกัน

val x = sum(1, 2)
val y = sum(3, 4)

// x = 10 --> compile error

val z = sum(x, y)

def sum(a:Int, b:Int) : Int = {
   return a + b
}

จากตัวอย่างข้างต้นจะเห็นว่าเราไม่ต้องจะเปลี่ยนค่าของ x, y และ z  เราต้องการเก็บค่าที่ได้มาจากเมทธอด sum เท่านั้น  อีกอย่างหนึ่งก้อคือ  a  และ  b ในเมทธอด sum เป็น val โดยอัตโนมัติเช่นกัน   compiler จะจัดการใส่ val  ให้เราเอง  ดังนั้นเราไม่สามารถเปลี่ยนค่า  (reassign value)  ให้กับ a และ b  ได้

def sum(a:Int, b:Int) : Int = {
   // a = 10 --> cannot reassign
   return a + b
}

เราไม่สามารถประกาศให้ parameter ในเมทธอดให้เป็น var หรือ val เพราะมันเป็น val โดยอัตโนมัติอยู่แล้ว

//compile error
def sum(var a:Int, val b:Int) : Int = {
   // a = 10 --> cannot reassign
   return a + b
}

สาเหตุที่  parameter เป็น val เพราะ Scala คิดว่า parameter ที่รับมาไม่ควรจะเปลี่ยนแปลงได้ เนื่องจากผู้ที่เรียกใช้อาจจะไม่ได้คิดว่าเมทธอดจะเปลี่ยนค่าที่ส่งมาให้  (side effect method)  ดังนั้นเพื่อความปลอดภัย Scala จึงทำให้เป็น val โดยอัตโนมัติ

สำหรับหัวข้อต่อไปที่เราจะนำมาทำความรู้จักคือ class และ instance  ใน  Scala

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