เรื่องต่อไปเกี่ยวกับการใช้ตัวแปรคือ 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
วันอังคารที่ 28 เมษายน พ.ศ. 2558
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น