Kotlin Academy · บทเรียน

expect และ actual

การนำไปใช้เฉพาะแพลตฟอร์ม

บทเรียน 2 จาก 413 ขั้นตอน

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 ประกาศสัญญาใน commonMain
  • actual ใช้งานสัญญานั้นในแต่ละแพลตฟอร์ม หรือผ่าน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. โครงสร้างโปรเจกต์ KMM
  2. expect และ actual
  3. การใช้ตรรกะทางธุรกิจร่วมกัน
  4. API ของแพลตฟอร์ม
← กลับไปที่ Kotlin Academy