Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

ความแตกต่างระหว่าง var และ val ใน Kotlin

ภาพรวม

ใน Kotlin มีคีย์เวิร์ดสองตัวสำหรับประกาศตัวแปร: var (mutable) และ val (immutable) การเข้าใจความแตกต่างเป็นพื้นฐานสำคัญของภาษา

ตารางเปรียบเทียบ

ลักษณะvarval
ความหมายVariable (เปลี่ยนแปลงได้)Value (คงที่/อ่านอย่างเดียว)
การกำหนดค่าซ้ำได้หลายครั้งได้เพียงครั้งเดียว (ตอนประกาศ)
การ Reassignได้ไม่ได้ (Compile Error)
เหมือนใน Javaตัวแปรทั่วไปfinal variable
Thread Safetyต้องจัดการเองปลอดภัยกว่า (reference ไม่เปลี่ยน)

ตัวอย่างการใช้งาน

var - เปลี่ยนค่าได้

fun main() {
    var name = "Kotlin"
    println("ค่าเริ่มต้น: $name") // Kotlin

    name = "Android" // ✅ OK
    println("หลังเปลี่ยน: $name") // Android

    // สามารถเปลี่ยนได้หลายครั้ง
    name = "Developer"
    name = "Programmer"
}

val - ไม่สามารถเปลี่ยนค่าได้

fun main() {
    val site = "tutorialspoint.com"
    println("ค่าเริ่มต้น: $site")

    // site = "new value" // ❌ Compile Error: Val cannot be reassigned

    // แต่ถ้า val เป็น Object ที่ mutable เอง (เช่น List, Object)
    val mutableList = mutableListOf(1, 2, 3)
    mutableList.add(4) // ✅ OK - เปลี่ยนเนื้อหาใน object ได้
    // mutableList = mutableListOf(5) // ❌ Error - ไม่ได้เปลี่ยน reference
}

แนวทางปฏิบัติที่ดี (Best Practices)

  • ใช้ val เป็นค่าเริ่มต้น - ประกาศตัวแปรเป็น val เสมอ หากไม่จำเป็นต้องเปลี่ยนค่า
  • เปลี่ยนเป็น var ก็ต่อเมื่อจำเป็น - เปลี่ยนก็ต่อเมื่อ logic ต้องการ mutation จริงๆ
  • Immutability ช่วยลด Bug - โค้ดอ่านง่าย ปลอดภัยต่อ Thread และง่ายต่อการ Debug
  • Functional Style - val ส่งเสริมการเขียนแบบ Functional Programming

กรณีพิเศษ: lateinit var

class Example {
    // lateinit ใช้กับ var เท่านั้น (ไม่ใช่ val)
    // ต้องเป็น non-null type และ non-primitive
    lateinit var name: String

    fun init() {
        name = "Initialized later"
    }
}

สรุป

val = Read-only reference (เหมือน final ใน Java) ใช้เป็นค่าเริ่มต้น
var = Mutable reference ใช้เมื่อจำเป็นต้อง reassign