expect และ actual
การนำไปใช้เฉพาะแพลตฟอร์ม
expect และ actual เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
ความจำเป็นของโค้ดเฉพาะแพลตฟอร์ม
ฟังก์ชันบางอย่างไม่มีการใช้งานร่วมกัน เช่น การอ่านชื่อระบบปฏิบัติการ UUID หรือแพลตฟอร์มปัจจุบัน KMM แก้ปัญหานี้ด้วยกลไก การประกาศคาดหมาย/การใช้งานจริง
การประกาศที่คาดหมาย
ใน commonMain คุณประกาศฟังก์ชันหรือคลาส expect ซึ่งเป็นสัญญาที่ไม่มีเนื้อหา โค้ดที่ใช้ร่วมกันสามารถเรียกใช้สิ่งนี้ได้
// commonMain
expect fun platformName(): Stringการใช้งานจริงบนแอนดรอยด์
แต่ละแพลตฟอร์มจะจัดเตรียมการใช้งาน actual ที่ตรงกับลายเซ็น
// androidMain
actual fun platformName(): String = "Android " + android.os.Build.VERSION.SDK_INTการใช้งานจริงบน iOS
ชุดซอร์สโค้ดของ iOS จะจัดเตรียมเวอร์ชันของตนเองโดยใช้ส่วนติดต่อการเขียนโปรแกรมเนทีฟ
// iosMain
import platform.UIKit.UIDevice
actual fun platformName(): String =
UIDevice.currentDevice.systemName + " " + UIDevice.currentDevice.systemVersionการใช้ในโค้ดร่วมกัน
โค้ดที่ใช้ร่วมกันเรียกฟังก์ชันที่คาดหมายไว้ราวกับว่าฟังก์ชันนั้นมีอยู่จริง ส่วนคอมไพเลอร์จะลิงก์การใช้งานจริงที่ถูกต้องสำหรับแต่ละเป้าหมาย
// commonMain
class Platform {
val name: String get() = platformName()
}คลาสที่คาดหมาย
คุณสามารถประกาศคลาสทั้งคลาสเป็นสิ่งที่คาดหมายได้ แต่ละแพลตฟอร์มจะจัดเตรียมคลาสที่ใช้งานจริงพร้อมสมาชิกที่ตรงกัน
// commonMain
expect class FileReader(path: String) {
fun read(): String
}การใช้งานคลาสจริง
แพลตฟอร์มต่าง ๆ จะใช้งานคลาสที่คาดหมายด้วยส่วนติดต่อการเขียนโปรแกรมสำหรับไฟล์แบบเนทีฟ เช่น Java IO บนแอนดรอยด์ และเฟรมเวิร์กพื้นฐานของ iOS
// androidMain
actual class FileReader actual constructor(private val path: String) {
actual fun read(): String = java.io.File(path).readText()
}การประกาศคาดหมายด้วยนามแฝงชนิดข้อมูล
การใช้งานจริงอาจเป็น นามแฝงชนิดข้อมูล ของชนิดข้อมูลแพลตฟอร์มที่มีอยู่แล้ว เพื่อหลีกเลี่ยงการสร้างตัวห่อหุ้ม
// commonMain
expect class Uuid
// jvm/androidMain
actual typealias Uuid = java.util.UUIDกฎการจับคู่ลายเซ็น
การใช้งานจริงต้องตรงกับสิ่งที่คาดหมายทุกประการ ได้แก่ ชื่อ พารามิเตอร์ และชนิดข้อมูลที่ส่งกลับ หากไม่ตรงกันจะเกิดข้อผิดพลาดขณะคอมไพล์ ซึ่งรับประกันความสอดคล้องระหว่างแพลตฟอร์ม
เมื่อไม่ควรใช้การประกาศคาดหมายและการใช้งานจริง
ควรใช้ ส่วนติดต่อพร้อมการใช้งานบนแพลตฟอร์มที่แทรกเข้ามาขณะทำงานแทน เมื่อการแยกส่วนต้องยืดหยุ่นกว่า และควรสงวนการประกาศคาดหมายและการใช้งานจริงไว้สำหรับโครงสร้างพื้นฐานของแพลตฟอร์มขนาดเล็กที่ตายตัว
ตัวอย่างโค้ดร่วมกัน
นอก KMM แนวคิดเดียวกันก็คือการเรียกใช้ส่วนแยกส่วน ในที่นี้ฟังก์ชันทั่วไปทำหน้าที่แทนการเรียกใช้แพลตฟอร์ม
fun platformName(): String = "Demo Platform"
fun main() {
println("Running on " + platformName())
}ตรวจสอบความเข้าใจ
การประกาศ expect เขียนไว้ที่ใด และการใช้งาน actual อยู่ที่ใด
ทบทวน
การประกาศคาดหมายและการใช้งานจริงช่วยเชื่อมช่องว่างระหว่างแพลตฟอร์ม:
expectประกาศสัญญาในcommonMainactualใช้งานสัญญานั้นในแต่ละแพลตฟอร์ม หรือผ่านtypealias- ลายเซ็นต้องตรงกันทุกประการ
- ควรใช้ส่วนติดต่อสำหรับการแยกส่วนที่ยืดหยุ่น
ถัดไป: การใช้ตรรกะทางธุรกิจร่วมกัน
เรียนรู้ Kotlin ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 51
- บทเรียน
- 203
คำถามที่พบบ่อย
บทเรียน “expect และ actual” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “expect และ actual” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “expect และ actual”
การนำไปใช้เฉพาะแพลตฟอร์ม คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “expect และ actual” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม
ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- โครงสร้างโปรเจกต์ KMM
- expect และ actual
- การใช้ตรรกะทางธุรกิจร่วมกัน
- API ของแพลตฟอร์ม