การแปลงชนิดข้อมูลอัจฉริยะ
แปลงชนิดข้อมูลอัตโนมัติหลังการตรวจสอบ
การแปลงชนิดข้อมูลอัจฉริยะ เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
สมาร์ตแคสต์คืออะไร
หลังจากตรวจสอบชนิดข้อมูลของค่าแล้ว Kotlin จะจดจำข้อเท็จจริงนั้น ภายในบล็อกที่ตรวจสอบแล้ว ระบบจะถือว่าค่านั้นเป็นชนิดข้อมูลที่แคบลงโดยอัตโนมัติ
ความสามารถนี้เรียกว่าสมาร์ตแคสต์ และช่วยลดการแคสต์ด้วยตนเอง
สมาร์ตแคสต์หลัง is
เมื่อการตรวจสอบด้วย is ผ่านแล้ว คุณสามารถใช้ค่าเสมือนเป็นชนิดข้อมูลนั้นได้โดยไม่ต้องเขียนการแคสต์
คอมไพเลอร์จะเพิ่มการแคสต์ให้คุณเอง
fun describe(x: Any) {
if (x is String) {
println(x.length) // x is smart-cast to String
}
}
fun main() {
describe("hello")
}สมาร์ตแคสต์หลังตรวจสอบ null
สมาร์ตแคสต์ใช้กับความเป็น null ได้เช่นกัน หลังยืนยันแล้วว่าค่าไม่ใช่ null ระบบจะถือว่าค่านั้นไม่เป็น null
fun length(text: String?): Int {
if (text != null) {
return text.length // smart-cast to non-null String
}
return 0
}
fun main() {
println(length("abc"))
println(length(null))
}สมาร์ตแคสต์ใน when
การตรวจสอบชนิดข้อมูลภายใน when ยังเปิดใช้สมาร์ตแคสต์ในแต่ละแขนงได้ด้วย
นี่เป็นวิธีมาตรฐานในการจัดการกับชนิดข้อมูลที่เป็นไปได้หลายแบบ
fun area(shape: Any): Double = when (shape) {
is Int -> shape.toDouble()
is String -> shape.length.toDouble()
else -> 0.0
}
fun main() {
println(area(5))
println(area("hello"))
}สมาร์ตแคสต์กับการคืนค่าก่อนกำหนด
หากคุณคืนค่าทันทีเมื่อค่าเป็น null คอมไพเลอร์จะทราบว่าหลังจากนั้นค่านั้นไม่เป็น null
ส่วนที่เหลือของฟังก์ชันจึงใช้ค่านั้นได้อย่างปลอดภัย
fun process(text: String?) {
if (text == null) return
println(text.uppercase()) // smart-cast here
}
fun main() {
process("data")
process(null)
}สมาร์ตแคสต์กับการคืนค่าด้วย Elvis
การใช้ Elvis ร่วมกับ return ยังทำให้เกิดสมาร์ตแคสต์กับโค้ดส่วนที่เหลือด้วย
fun process(text: String?) {
val safe = text ?: return
println(safe.length) // safe is non-null
}
fun main() {
process("hi")
process(null)
}เงื่อนไขแบบผสม
สมาร์ตแคสต์จะทำงานตามตรรกะของเงื่อนไขแบบผสมที่ใช้ &&
หลังตรวจสอบชนิดข้อมูลทางด้านซ้ายแล้ว ด้านขวาจะเห็นชนิดข้อมูลที่แคบลงอยู่แล้ว
fun check(x: Any) {
if (x is String && x.length > 3) {
println("long string")
} else {
println("other")
}
}
fun main() {
check("hello")
check(2)
}เมื่อสมาร์ตแคสต์ทำงานไม่ได้
สมาร์ตแคสต์ต้องอาศัยการรับประกันว่าค่าจะไม่เปลี่ยนระหว่างการตรวจสอบกับการใช้งาน
var ที่เปลี่ยนแปลงพร้อมกันได้อาจไม่รองรับสมาร์ตแคสต์ ควรใช้ val เพื่อให้สมาร์ตแคสต์ทำงานได้แน่นอน
fun main() {
val text: String? = "stable"
if (text != null) {
println(text.length) // val smart-casts cleanly
}
}val ในพื้นที่ปลอดภัยที่สุด
การคัดลอกค่าไปไว้ใน val ที่อยู่ภายในฟังก์ชันทำให้สมาร์ตแคสต์เชื่อถือได้
นี่เป็นรูปแบบที่ใช้กันทั่วไปเมื่อทำงานกับพร็อพเพอร์ตีที่อาจเป็น null
class Box(val content: String?)
fun main() {
val box = Box("item")
val c = box.content
if (c != null) {
println(c.uppercase())
}
}สมาร์ตแคสต์เทียบกับการแคสต์อย่างชัดแจ้ง
สมาร์ตแคสต์ใช้แทนการแคสต์ as อย่างชัดแจ้งได้เกือบทั้งหมด ปลอดภัยกว่าเพราะจะใช้ได้เฉพาะเมื่อพิสูจน์ชนิดข้อมูลนั้นแล้ว
ถัดไป คุณจะได้เรียนรู้ is และ as อย่างชัดแจ้ง
fun main() {
val x: Any = "text"
if (x is String) {
// no need for (x as String)
println(x.reversed())
}
}นำทุกอย่างมาประกอบกัน
สมาร์ตแคสต์ช่วยให้คอมไพเลอร์จำกัดชนิดข้อมูลให้แคบลงโดยอัตโนมัติ:
- หลังการตรวจสอบด้วย
is→ แคสต์เป็นชนิดข้อมูลนั้น - หลังการตรวจสอบ null → แคสต์เป็นชนิดข้อมูลที่ไม่เป็น null
- ทำงานใน
ifwhenและหลังการคืนค่าก่อนกำหนด - เชื่อถือได้มากที่สุดเมื่อใช้กับ
val
fun render(x: Any): String {
if (x is Int) return "number " + x
if (x is String) return "text " + x.uppercase()
return "unknown"
}
fun main() {
println(render(7))
println(render("go"))
}ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจของคุณเกี่ยวกับสมาร์ตแคสต์
สรุปทบทวน
คุณได้เรียนรู้เกี่ยวกับสมาร์ตแคสต์:
- การตรวจสอบชนิดข้อมูลและ null จะจำกัดชนิดข้อมูลให้แคบลงโดยอัตโนมัติ
- ทำงานใน
ifwhenและหลังการคืนค่าก่อนกำหนด valทำให้สมาร์ตแคสต์เชื่อถือได้มากที่สุด
ถัดไป คุณจะศึกษาโอเปอเรเตอร์ is และ as โดยตรง
คำถามที่พบบ่อย
บทเรียน “การแปลงชนิดข้อมูลอัจฉริยะ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การแปลงชนิดข้อมูลอัจฉริยะ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การแปลงชนิดข้อมูลอัจฉริยะ”
แปลงชนิดข้อมูลอัตโนมัติหลังการตรวจสอบ คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การแปลงชนิดข้อมูลอัจฉริยะ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม
ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การใช้ when เป็นนิพจน์
- การแปลงชนิดข้อมูลอัจฉริยะ
- ตัวดำเนินการ is และ as
- when แบบครอบคลุมทุกกรณี