expect/actual
- Kotlin kursu
- Uzman
- Ders 27/47
- 5 dk
expect/actual ile platform kodu öğrenirsin.
expect/actual nedir?
expect/actual, KMP'de platforma özgü kodu yöneten mekanizmadır. expect commonMain'de bir sözleşme bildirir; her hedef actual ile onu uygular.
Örneğin expect fun platformName(): String commonMain'de yazılır. iOS hedefinde actual fun platformName(): String = "iOS", JVM hedefinde actual fun platformName(): String = "JVM" tanımlanır. Derleyici her hedef için doğru actual'i seçer. Bu sayede paylaşılan kod, platformu bilmeden bu fonksiyonu çağırabilir.
actual uygulama örneği
Bir actual uygulama, hedefin kaynak kümesinde yazılır. JVM hedefinde jvmMain, iOS hedefinde iosMain gibi.
Örnek: actual fun platformName(): String = "JVM". actual bildirimin imzası expect ile birebir aynı olmalıdır; tür, parametre ve isim uyumlu olmalıdır. Aksi halde derleyici hata verir. Bu katılık, paylaşılan kodun her hedefde tutarlı çalışmasını sağlar. Bu derste kavramı bir platformName fonksiyonuyla modelleyeceğiz.
Uygulama platformName yaz
fun platformName(): String tanımla. "JVM" döndürsün. main içinde println(platformName()) yaz.
Başlangıç kodu
// platformName fonksiyonunu ekle
fun main() {
// platform adını yazdır
}Örnek çözüm
fun platformName(): String = "JVM"
fun main() {
println(platformName())
}Beklenen çıktı
JVM
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 expect/actual parçalarını eşle
| Kavram | Anlamı |
|---|---|
expect fun |
commonMain'de sözleşme |
actual fun |
hedef kümede uygulama |
expect val |
commonMain'de sabit |
actual val |
hedef kümede değer |
2 actual anahtar kelimesi nereye yazılır?
actual is target-specific.- iosMain Doğru cevap
- commonMain
- build.gradle
- test
Açıklama: actual, hedefin kaynak kümesine yazılır; örn. iosMain.
3 actual bildirimini tamamla
____ fun log(msg: String) { println(msg) }
actual fun log(msg: String) { println(msg) }
Açıklama: actual, hedef kümesinde log fonksiyonunu uygular.