ชนิดข้อมูลจากแพลตฟอร์ม
ความสามารถเป็นค่าว่างจาก Java
ชนิดข้อมูลจากแพลตฟอร์ม เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
Kotlin พบกับ Java
Kotlin ทำงานบน JVM และเรียกใช้โค้ด Java อยู่เสมอ แต่ Java ไม่มีแนวคิดเรื่องชนิดที่เป็นค่าว่างได้และชนิดที่ไม่เป็นค่าว่าง
แล้ว Kotlin จัดการกับค่าที่มาจาก Java อย่างไร คำตอบคือผ่าน ชนิดแพลตฟอร์ม
ชนิดแพลตฟอร์มคืออะไร
ชนิดแพลตฟอร์มคือชนิดที่ Kotlin ได้รับจาก Java ซึ่งไม่ทราบว่ารองรับค่าว่างหรือไม่
Kotlin เขียนชนิดนี้เป็น String! ในข้อความแสดงข้อผิดพลาด เครื่องหมายอัศเจรีย์หมายความว่าอาจเป็นค่าว่างหรือไม่เป็นค่าว่างก็ได้ และ Kotlin จะไม่บังคับให้เลือกแบบใดแบบหนึ่ง
การตรวจสอบที่ผ่อนปรน
สำหรับชนิดแพลตฟอร์ม Kotlin จะผ่อนปรนการตรวจสอบค่าว่าง คุณสามารถถือว่าค่านั้นไม่เป็นค่าว่างได้โดยไม่เกิดข้อผิดพลาดจากคอมไพเลอร์
ข้อแลกเปลี่ยนคือ หากค่านั้นเป็นค่าว่างจริง คุณจะได้รับ NullPointerException ขณะทำงาน
คุณเป็นผู้เลือกชนิด
เมื่อจัดเก็บค่าชนิดแพลตฟอร์ม คุณจะเป็นผู้กำหนดชนิดของค่านั้น:
- เป็นชนิดที่ไม่เป็นค่าว่าง
String→ สะดวกแต่มีความเสี่ยง - เป็นชนิดที่เป็นค่าว่างได้
String?→ ปลอดภัยและระบุอย่างชัดเจน
ตัวอย่าง Kotlin นี้จำลองตัวเลือกดังกล่าว
fun fromJava(): String? = "value from Java"
fun main() {
val safe: String? = fromJava()
println(safe?.length)
}ตัวเลือกที่มีความเสี่ยง
หากคุณสมมติว่าค่านั้นไม่เป็นค่าว่าง แต่แหล่งที่มาคืนค่าว่าง การทำงานล้มเหลวจะเกิดขึ้นขณะกำหนดค่าหรือใช้งานครั้งแรก
นี่คืออันตรายที่ซ่อนอยู่ของชนิดแพลตฟอร์ม
fun fromJava(): String? = null
fun main() {
try {
val risky: String = fromJava()!!
println(risky.length)
} catch (e: NullPointerException) {
println("Null came from the Java side")
}
}คำอธิบายประกอบช่วยได้
ไลบรารี Java สามารถใช้คำอธิบายประกอบอย่าง @Nullable และ @NotNull ได้
เมื่อมีคำอธิบายประกอบเหล่านี้ Kotlin จะปฏิบัติตาม และมอบชนิด String? หรือ String ที่ถูกต้องให้คุณแทนชนิดแพลตฟอร์ม
แนวทางปฏิบัติที่ดี: ให้ถือว่าเป็นค่าว่างได้
เมื่อเรียกใช้โค้ด Java ที่ไม่มีคำอธิบายประกอบ นิสัยที่ปลอดภัยคือให้ถือว่าผลลัพธ์เป็นชนิดที่เป็นค่าว่างได้
กำหนดชนิดของตัวแปรด้วย ? และใช้การเรียกแบบปลอดภัย เช่นเดียวกับค่าที่เป็นค่าว่างได้ใน Kotlin
fun fromJava(): String? = "data"
fun main() {
val value: String? = fromJava()
val length = value?.length ?: 0
println(length)
}ขอบเขตเชิงป้องกัน
ให้ถือว่าขอบเขตระหว่าง Java กับ Kotlin เป็นแหล่งข้อมูลที่ไม่น่าเชื่อถือ ตรวจสอบค่าหรือกำหนดค่าเริ่มต้นให้ค่าต่าง ๆ ทันทีที่เข้าสู่โค้ด Kotlin ของคุณ
หลังจากนั้น โค้ดส่วนที่เหลือจะทำงานกับชนิด Kotlin ที่สะอาดและชัดเจน
fun fromJava(): String? = null
fun main() {
val name = fromJava() ?: "default"
// from here on, name is a clean non-null String
println(name.uppercase())
}เหตุผลที่ Kotlin อนุญาตให้ทำเช่นนี้
Kotlin อาจบังคับให้ค่าทุกค่าจาก Java เป็นชนิดที่เป็นค่าว่างได้ แต่จะทำให้การทำงานร่วมกับ Java มีโค้ดมากเกินความจำเป็น
ชนิดแพลตฟอร์มจึงเป็นการประนีประนอมที่ใช้งานได้จริง นั่นคือความสะดวกพร้อมตัวเลือกในการตรวจสอบอย่างเข้มงวด
การสังเกตชนิดแพลตฟอร์ม
คุณจะไม่เขียน String! ด้วยตนเอง ชนิดนี้จะปรากฏเฉพาะในคำแนะนำของสภาพแวดล้อมการพัฒนาแบบเบ็ดเสร็จและข้อความแสดงข้อผิดพลาด เมื่อคุณวางเมาส์เหนือค่าที่มาจาก Java
เมื่อเห็น ! นั่นคือสัญญาณให้คุณตัดสินใจเรื่องความสามารถในการเป็นค่าว่างได้อย่างรอบคอบ
สรุปรวม
ชนิดแพลตฟอร์มเชื่อม Java และ Kotlin เข้าด้วยกัน:
- ไม่ทราบความสามารถในการเป็นค่าว่างได้ โดยแสดงเป็น
Type! - Kotlin ให้คุณเลือกว่าจะเป็นชนิดที่เป็นค่าว่างได้หรือไม่เป็นค่าว่าง
- เมื่อไม่แน่ใจ ให้ถือว่าเป็นชนิดที่เป็นค่าว่างได้เพื่อความปลอดภัย
- คำอธิบายประกอบช่วยขจัดการคาดเดา
fun fromJava(): String? = "safe value"
fun main() {
val value: String? = fromJava()
println(value?.uppercase() ?: "missing")
}ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจของคุณเกี่ยวกับชนิดแพลตฟอร์ม
ทบทวน
คุณได้เรียนรู้ว่าความสามารถในการเป็นค่าว่างได้ข้ามขอบเขตระหว่าง Java กับ Kotlin อย่างไร:
- ชนิดแพลตฟอร์มไม่ทราบความสามารถในการเป็นค่าว่างได้
- Kotlin ผ่อนปรนการตรวจสอบ แต่สมมติฐานที่ผิดจะทำให้เกิด NPE ขณะทำงาน
- ให้ถือว่าเป็นชนิดที่เป็นค่าว่างได้และกำหนดค่าเริ่มต้นที่ขอบเขต
- คำอธิบายประกอบของ Java ช่วยคืนชนิดที่ถูกต้อง
การเจาะลึกเรื่องความปลอดภัยของค่าว่างจบลงเพียงเท่านี้
คำถามที่พบบ่อย
บทเรียน “ชนิดข้อมูลจากแพลตฟอร์ม” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ชนิดข้อมูลจากแพลตฟอร์ม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ชนิดข้อมูลจากแพลตฟอร์ม”
ความสามารถเป็นค่าว่างจาก Java คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “ชนิดข้อมูลจากแพลตฟอร์ม” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม
ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ชนิด Nullable และ Non-Null
- การเรียกใช้อย่างปลอดภัยและ Elvis
- ตัวดำเนินการ !!
- ชนิดข้อมูลจากแพลตฟอร์ม