การเรียกอย่างปลอดภัยและ Elvis
ตัวดำเนินการ ?. และ ?:
การเรียกอย่างปลอดภัยและ Elvis เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน
นอกเหนือจากการตรวจสอบด้วย if
การตรวจสอบค่าที่อาจเป็น Null ทุกค่าด้วย if ใช้งานได้ แต่โค้ดจะยืดยาวอย่างรวดเร็ว Kotlin จึงมีตัวดำเนินการแบบกระชับสำหรับจัดการค่า Null โดยเฉพาะ
บทเรียนนี้ครอบคลุมตัวดำเนินการเรียกอย่างปลอดภัย ?. และตัวดำเนินการ Elvis ?: ซึ่งเป็นเครื่องมือสองอย่างที่คุณจะใช้บ่อยมาก
ตัวดำเนินการเรียกอย่างปลอดภัย
ตัวดำเนินการ ?. จะเรียกเมธอดก็ต่อเมื่อค่าไม่เป็น Null หากค่าเป็น Null นิพจน์ทั้งหมดจะให้ผลเป็น null แทนที่จะทำให้โปรแกรมขัดข้อง
นี่คือทางลัดที่ปลอดภัยสำหรับรูปแบบการตรวจสอบว่าไม่เป็น Null ก่อนใช้งาน
fun main() {
val name: String? = "Coddy"
println(name?.length)
}การเรียกอย่างปลอดภัยกับค่า Null
เมื่อค่าที่อยู่ทางซ้ายเป็น Null การเรียกอย่างปลอดภัยจะหยุดทำงานต่อและส่งคืน null โดยไม่มีการโยนข้อยกเว้น
ในตัวอย่างนี้ ผลที่พิมพ์ออกมาคือคำว่า null ไม่ใช่ข้อขัดข้อง
fun main() {
val name: String? = null
println(name?.length) // prints: null
}การเชื่อมต่อการเรียกอย่างปลอดภัย
คุณสามารถเชื่อมต่อ ?. หลายขั้นตอนได้ หากส่วนใดส่วนหนึ่งเป็น Null การเชื่อมต่อทั้งหมดจะหยุดและให้ผลเป็น null
วิธีนี้เหมาะอย่างยิ่งสำหรับเข้าถึงข้อมูลเสริมที่ซ้อนกันหลายระดับ
class Address(val city: String?)
class User(val address: Address?)
fun cityOf(u: User?): String? {
return u?.address?.city
}ตัวดำเนินการ Elvis
ตัวดำเนินการ Elvis ?: จะจัดหาค่าสำรองเมื่อค่าด้านซ้ายเป็น Null ชื่อนี้มาจากทรงผมของนักร้องที่มีรูปร่างคล้ายสัญลักษณ์ดังกล่าว
ให้อ่านว่า ใช้ค่าด้านซ้าย หรือใช้ค่าด้านขวาแทน
fun main() {
val name: String? = null
val shown = name ?: "Guest"
println(shown) // prints: Guest
}Elvis กับการเรียกอย่างปลอดภัย
การเรียกอย่างปลอดภัยและ Elvis ทำงานร่วมกันได้ดี ใช้ ?. เพื่อเข้าถึงค่าภายใน และใช้ ?: เพื่อกำหนดค่าเริ่มต้นหากส่วนใดเป็น Null
รูปแบบนี้เปลี่ยนผลลัพธ์ที่อาจเป็น Null ให้เป็นค่าที่รับประกันว่าไม่เป็น Null
fun main() {
val name: String? = null
val len: Int = name?.length ?: 0
println(len) // prints: 0
}ตัวอย่างความยาวพร้อมค่าเริ่มต้น
ชนิดข้อมูลของผลลัพธ์ในที่นี้คือ Int ธรรมดา ไม่ใช่ Int? ตัวดำเนินการ Elvis ได้กำจัดความเป็น Null ออกไปแล้ว
หลังใช้ ?: พร้อมค่าสำรองที่ไม่เป็น Null คอมไพเลอร์จะทราบว่าค่านั้นไม่มีทางเป็น Null
val title: String? = "Kotlin"
val length: Int = title?.length ?: 0
// length is a non-null Intใช้ Elvis เพื่อส่งคืนก่อนกำหนด
เนื่องจาก return และ throw เป็นนิพจน์ใน Kotlin คุณจึงวางไว้ทางขวาของ Elvis ได้
นี่เป็นวิธีที่สะอาดในการออกจากฟังก์ชันก่อนกำหนดเมื่อค่าที่จำเป็นไม่มีอยู่
fun process(input: String?) {
val text = input ?: return
println(text.uppercase())
}การเรียกอย่างปลอดภัยกับ let
ใช้ ?. ร่วมกับ let เพื่อเรียกใช้บล็อกเฉพาะเมื่อค่าไม่เป็น Null ภายในบล็อก ค่าจะไม่เป็น Null และมีชื่อว่า it
นี่เป็นรูปแบบสำนวนที่ใช้กันทั่วไปเมื่อต้องดำเนินการกับค่าที่อาจไม่มีอยู่
fun main() {
val email: String? = "a@b.com"
email?.let {
println("Sending to " + it)
}
}นำทุกอย่างมารวมกัน
โปรแกรมสั้น ๆ สามารถแสดงให้เห็นว่าการเรียกอย่างปลอดภัยและ Elvis ทำงานร่วมกันเพื่อสร้างข้อความที่เป็นมิตรได้อย่างไร
สังเกตว่าไม่จำเป็นต้องใช้คำสั่ง if แต่โค้ดก็ยังไม่มีความเสี่ยงที่จะขัดข้องจากค่า Null
fun main() {
val nickname: String? = null
val display = nickname?.uppercase() ?: "ANONYMOUS"
println(display)
}ควรใช้แบบใดเมื่อไร
ใช้ ?. เมื่อต้องการให้ผลลัพธ์ที่เป็น Null ไหลต่อไปโดยไม่ก่อปัญหา ใช้ ?: เมื่อต้องการแทนที่ Null ด้วยค่าเริ่มต้นที่ชัดเจน
เมื่อนำทั้งสองอย่างมาใช้ร่วมกัน ก็ครอบคลุมการจัดการค่า Null ในชีวิตประจำวันส่วนใหญ่ได้โดยไม่ต้องเขียนการตรวจสอบที่ยืดยาว
val count = list?.size ?: 0
// safe call reads size, Elvis defaults to 0ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับการเรียกอย่างปลอดภัยและตัวดำเนินการ Elvis
สรุปทบทวน
การเรียกอย่างปลอดภัย ?. จะเรียกใช้สมาชิกก็ต่อเมื่อค่าที่เรียกไม่เป็น Null มิฉะนั้นจะให้ผลเป็น null ส่วนตัวดำเนินการ Elvis ?: จะแทนที่ Null ด้วยค่าสำรอง
การเชื่อมต่อทั้งสองอย่างช่วยจัดการความเป็น Null ได้อย่างสะอาด ต่อไปคุณจะได้ศึกษาเพิ่มเติมเกี่ยวกับฟังก์ชันขอบเขต เช่น let และ also
คำถามที่พบบ่อย
บทเรียน “การเรียกอย่างปลอดภัยและ Elvis” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเรียกอย่างปลอดภัยและ Elvis” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเรียกอย่างปลอดภัยและ Elvis”
ตัวดำเนินการ ?. และ ?: คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การเรียกอย่างปลอดภัยและ Elvis” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม
ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ชนิดข้อมูลที่อาจเป็นค่าว่างเทียบกับไม่เป็นค่าว่าง
- การเรียกอย่างปลอดภัยและ Elvis
- ฟังก์ชัน let, also และ scope
- หลีกเลี่ยง NullPointerExceptions