0Pricing
Android Academy · บทเรียน

ความปลอดภัยของค่า Null

ทำความเข้าใจระบบความปลอดภัยของค่า Null ใน Kotlin ได้แก่ ชนิดข้อมูลที่เป็น Null ได้ ตัวดำเนินการเรียกอย่างปลอดภัย ตัวดำเนินการ Elvis และวิธีกำจัด NullPointerExceptions

ความปลอดภัยของค่า Null เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน

ข้อผิดพลาดมูลค่าพันล้านดอลลาร์

ใน Java ตัวแปรใด ๆ อาจเป็น null และทำให้เกิด NullPointerException (NPE) ขณะทำงาน ซึ่งเป็นหนึ่งในข้อขัดข้องที่พบบ่อยที่สุดในแอป Android

Tony Hoare ผู้คิดค้น null เรียกสิ่งนี้ว่า ข้อผิดพลาดมูลค่าพันล้านดอลลาร์

Kotlin กำจัด NPE ได้ตั้งแต่ขณะคอมไพล์ด้วยระบบความปลอดภัยจากค่า null

ชนิดที่รับค่า null ได้และรับไม่ได้

ใน Kotlin ชนิดข้อมูลจะไม่รับค่า null เป็นค่าเริ่มต้น หากต้องการให้รับ null ได้ ให้เติม ? ต่อท้ายชนิดข้อมูล:

  • String — ไม่เป็น null และรับรองว่ามีค่า
  • String? — อาจเป็น null

ตัวคอมไพเลอร์จะบังคับใช้กฎนี้ จึงไม่ยอมให้คุณกำหนด null ให้ชนิดข้อมูลที่ไม่รับค่า null

ตัวอย่างชนิดที่รับค่า null ได้

ตัวคอมไพเลอร์จะตรวจพบข้อผิดพลาดเกี่ยวกับ null ก่อนที่แอปจะทำงาน:

fun main() {
    val name: String = "Alice"   // never null
    // name = null  // COMPILE ERROR

    var nickname: String? = "Al"  // nullable
    nickname = null               // OK

    println(name)
    println(nickname)  // null
}

ตัวดำเนินการเรียกอย่างปลอดภัย ?.

ตัวดำเนินการเรียกอย่างปลอดภัย ?. จะเรียกใช้เมธอดก็ต่อเมื่อวัตถุไม่เป็น null หากเป็น null จะส่งคืน null แทนที่จะทำให้โปรแกรมขัดข้อง

nickname?.length → ส่งคืนความยาว หรือส่งคืน null หาก nickname เป็น null

การเรียกอย่างปลอดภัย

ใช้ ?. เพื่อเข้าถึงคุณสมบัติที่อาจเป็น null อย่างปลอดภัย:

fun main() {
    var text: String? = "Hello"
    println(text?.length)   // 5
    println(text?.uppercase()) // HELLO

    text = null
    println(text?.length)   // null (no crash!)
    println(text?.uppercase()) // null
}

ตัวดำเนินการ Elvis ?:

ตัวดำเนินการ Elvis ?: ใช้กำหนดค่าเริ่มต้นเมื่อนิพจน์เป็น null:

val len = text?.length ?: 0

อ่านได้ว่า: "ความยาวของ text หรือ 0 หาก text เป็น null"

ชื่อนี้มาจากอีโมจิ Elvis 🕺 ซึ่งทรงผมมีลักษณะคล้าย ?:

ตัวอย่างตัวดำเนินการ Elvis

กำหนดค่าเริ่มต้นที่ปลอดภัยด้วย ?::

fun main() {
    var name: String? = "Bob"
    println(name?.length ?: 0)  // 3

    name = null
    println(name?.length ?: 0)  // 0

    val display = name ?: "Anonymous"
    println(display)  // Anonymous
}

ตรวจสอบ null ด้วย if

ภายในบล็อก if (x != null) Kotlin จะแปลงชนิดข้อมูลอย่างชาญฉลาดจากชนิดที่อาจเป็น null เป็นชนิดที่ไม่เป็น null โดยอัตโนมัติ จึงไม่จำเป็นต้องใช้ ?. ภายในบล็อก

ตัวอย่างการแปลงชนิดข้อมูลอย่างชาญฉลาด

Kotlin จะจำกัดชนิดข้อมูลให้แคบลงหลังการตรวจสอบ null:

fun printLength(text: String?) {
    if (text != null) {
        // 'text' is now String (non-nullable) here
        println("Length: ${text.length}") // no ?. needed
    } else {
        println("text is null")
    }
}

fun main() {
    printLength("Kotlin")  // Length: 6
    printLength(null)       // text is null
}

ตรวจสอบอย่างรวดเร็ว

null?.length ?: -1 จะประเมินค่าเป็นอะไร

สรุป: ความปลอดภัยจากค่า null

ระบบความปลอดภัยจากค่า null ของ Kotlin ช่วยกำจัด NPE:

  • ชนิดข้อมูลจะไม่รับค่า null เป็นค่าเริ่มต้น เติม ? เพื่อให้รับ null ได้
  • ?. การเรียกอย่างปลอดภัย — ส่งคืน null แทนการทำให้โปรแกรมขัดข้อง
  • ?: ตัวดำเนินการ Elvis — กำหนดค่าเริ่มต้นเมื่อเป็น null
  • การแปลงชนิดข้อมูลอย่างชาญฉลาดภายในบล็อก if (x != null)

ถัดไป: จัดโครงสร้างโค้ดด้วยคลาสและออบเจ็กต์

คำถามที่พบบ่อย

บทเรียน “ความปลอดภัยของค่า Null” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ความปลอดภัยของค่า Null” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ความปลอดภัยของค่า Null”

ทำความเข้าใจระบบความปลอดภัยของค่า Null ใน Kotlin ได้แก่ ชนิดข้อมูลที่เป็น Null ได้ ตัวดำเนินการเรียกอย่างปลอดภัย ตัวดำเนินการ Elvis และวิธีกำจัด NullPointerExceptions คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ความปลอดภัยของค่า Null” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม

ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ความปลอดภัยของค่า Null
  2. คลาสและออบเจ็กต์
  3. คลาสข้อมูลและคลาสปิด
  4. ฟังก์ชันขยายและฟังก์ชันลำดับสูง
← กลับไปที่ Android Academy