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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ชนิด Nullable และตัวปรับแต่ง ?
- Safe Call ?. และ Elvis ?: ในโค้ดจริง
- let, also และ run กับตัวรับ Nullable
- ตัวดำเนินการ !!: เมื่อใดและเหตุใดควรหลีกเลี่ยง