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

Safe Call ?. และ Elvis ?: ในโค้ดจริง

เชื่อม safe call และกำหนดค่า fallback ด้วยตัวดำเนินการ Elvis

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

สองตัวดำเนินการที่มีผลอย่างมาก

การเรียกแบบปลอดภัย ?. จะเรียกสมาชิกก็ต่อเมื่อตัวรับไม่เป็นค่าว่าง ส่วน ตัวดำเนินการ Elvis ?: จะให้ค่าทดแทนเมื่อด้านซ้ายเป็นค่าว่าง

พื้นฐานการเรียกแบบปลอดภัย

x?.member จะประเมินผลเป็น null หาก x เป็นค่าว่าง มิฉะนั้นจะเข้าถึง member ตามปกติ

fun main() {
    val name: String? = "Kotlin"
    val len: Int? = name?.length
    println(len) // 6
    val nope: String? = null
    println(nope?.length) // null
}

พื้นฐานตัวดำเนินการ Elvis

x ?: default จะคืนค่า x หากไม่เป็นค่าว่าง มิฉะนั้นจะคืนค่า default ทางด้านขวา

fun main() {
    val name: String? = null
    val display = name ?: "Anonymous"
    println(display) // Anonymous
}

การรวมการเรียกแบบปลอดภัยกับ Elvis

รูปแบบที่พบบ่อยคือ obj?.member ?: default ซึ่งใช้สำหรับอ่านค่าหรือใช้ค่าทดแทน

fun main() {
    val name: String? = null
    val length = name?.length ?: 0
    println("length = $length") // 0
}

การเชื่อมการเรียกแบบปลอดภัย

เชื่อม ?. ผ่านหลายระดับได้ นิพจน์ทั้งหมดจะหยุดประเมินผลและให้ค่า null หากลิงก์ใดลิงก์หนึ่งเป็นค่าว่าง

class Address(val city: String?)
class User(val address: Address?)
fun main() {
    val u: User? = User(Address(null))
    val city = u?.address?.city ?: "Unknown"
    println(city) // Unknown
}

การโยนข้อผิดพลาดทางด้านขวาของ Elvis

ด้านขวาของ Elvis สามารถเป็นนิพจน์ใดก็ได้ รวมถึง throw จึงเหมาะสำหรับตรวจสอบค่าที่จำเป็นต้องมี

fun loadConfig(path: String?): String {
    val p = path ?: throw IllegalArgumentException("path required")
    return "loaded $p"
}
fun main() {
    println(loadConfig("/etc/app"))
    // loadConfig(null) // throws
}

การเรียกแบบปลอดภัยกับเมธอด

การเรียกแบบปลอดภัยใช้ได้กับเมธอดทุกชนิด ไม่ใช่เฉพาะการเข้าถึงพร็อพเพอร์ตีเท่านั้น

fun main() {
    val raw: String? = "  hello  "
    val cleaned = raw?.trim()?.uppercase() ?: ""
    println(cleaned) // HELLO
}

การเรียกแบบปลอดภัยในเงื่อนไข

คุณสามารถใช้การเรียกแบบปลอดภัยภายในเงื่อนไขได้ และใช้ร่วมกับ Elvis เพื่อกำหนดค่าบูลีนเริ่มต้น

fun main() {
    val name: String? = "Alice"
    if (name?.startsWith("A") == true) {
        println("Starts with A")
    }
}

Elvis กับ return

ใช้ Elvis ร่วมกับ return เพื่อสร้างประโยคตรวจสอบเบื้องต้นและออกจากฟังก์ชันแต่เนิ่น ๆ หากค่าที่จำเป็นเป็นค่าว่าง

fun process(input: String?) {
    val safe = input ?: return
    println("processing $safe")
}
fun main() {
    process("abc")
    process(null) // returns silently
}

Elvis กับ continue/break

ภายในลูป Elvis สามารถหยุดการทำงานและไปที่ continue หรือ break ได้ ทำให้การจัดการค่าว่างกระชับขึ้น

fun main() {
    val items: List<String?> = listOf("a", null, "b", null, "c")
    for (item in items) {
        val v = item ?: continue
        print("$v ")
    }
    println() // a b c
}

การใช้งานจริง: การค้นหาการกำหนดค่า

การเรียกแบบปลอดภัยกับ Elvis สามารถรวมกันเป็นบรรทัดเดียวสำหรับอ่านการกำหนดค่าที่อาจไม่มี โดยมีค่าเริ่มต้นรองรับ

class Config(val timeoutMs: Int?, val host: String?)
fun main() {
    val cfg: Config? = Config(null, "prod.example.com")
    val timeout = cfg?.timeoutMs ?: 5000
    val host = cfg?.host ?: "localhost"
    println("$host @ $timeout ms")
}

ตรวจสอบความเข้าใจ

นิพจน์ user?.email ?: "unknown" จะประเมินผลเป็นอะไรเมื่อ user เป็นค่าว่าง

สรุปทบทวน

รวมการเรียกแบบปลอดภัย (?.) กับ Elvis (?:) เพื่อเขียนโค้ดที่ปลอดภัยจากค่าว่างและกระชับ ใช้ Elvis ร่วมกับ throw หรือ return เพื่อสร้างประโยคตรวจสอบเบื้องต้นที่ออกจากการทำงานทันทีเมื่อข้อมูลที่ต้องการไม่มี

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

บทเรียน “Safe Call ?. และ Elvis ?: ในโค้ดจริง” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “Safe Call ?. และ Elvis ?: ในโค้ดจริง”

เชื่อม safe call และกำหนดค่า fallback ด้วยตัวดำเนินการ Elvis คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “Safe Call ?. และ Elvis ?: ในโค้ดจริง” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ชนิด Nullable และตัวปรับแต่ง ?
  2. Safe Call ?. และ Elvis ?: ในโค้ดจริง
  3. let, also และ run กับตัวรับ Nullable
  4. ตัวดำเนินการ !!: เมื่อใดและเหตุใดควรหลีกเลี่ยง
← กลับไปที่ Kotlin Academy