Özet - Kotlin/Native
- Kotlin kursu
- Uzman
- Ders 24/47
- 5 dk
interop, memory model ve native kütüphaneyi birleştirerek bir native modül yazarsın.
Özet - Kotlin/Native
Bu grupta Kotlin/Native, C interop, bellek modeli, Konan ve yerel kütüphane kavramlarını öğrendin. Şimdi bunları birleştiren bir model yazacaksın: bir Counter ve bir NativeLib.
Yazacağın Counter yeni bellek modelinde paylaşılabilir; NativeLib ise yerel bir kütüphaneyi temsil eder. main'de Counter'ı artırıp NativeLib'i yükleyip birlikte yazdıracaksın. Bu, Kotlin/Native'de tipik bir akıştır: paylaşımlı durum ve kütüphane çağrısı.
Birleştirme: paylaşımlı durum + kütüphane
Şimdi Counter ve NativeLib'i birlikte kullanacağız. Counter, yeni bellek modelinde paylaşılan bir sayacı temsil eder; NativeLib bir yerel kütüphaneyi.
Örnek: class Counter(private var n: Int = 0) { fun inc() { n += 1 }; fun get(): Int = n } ve object NativeLib { val name = "sqlite"; fun load(): String = "loaded: $name" }. main'de val c = Counter(); c.inc() yapıp println("${'$'}{NativeLib.load()}: ${'$'}{c.get()}") yaz. Bu, paylaşımlı durum ve kütüphane çağrısının tipik birleşimidir.
Uygulama Counter + NativeLib yaz
class Counter(private var n: Int = 0) tanımla; fun inc() metodu n'yi bir artırsın; fun get(): Int n'yi döndürsün. object NativeLib tanımla; val name = "sqlite" ve fun load(): String = "loaded: $name" olsun. main içinde val c = Counter(); c.inc() yapıp println("${'$'}{NativeLib.load()}: ${'$'}{c.get()}") yaz.
Başlangıç kodu
// Counter ve NativeLib tanımlarını ekle
fun main() {
// Counter'ı artır, NativeLib'i yükle ve yazdır
}Örnek çözüm
class Counter(private var n: Int = 0) {
fun inc() { n += 1 }
fun get(): Int = n
}
object NativeLib {
val name = "sqlite"
fun load(): String = "loaded: $name"
}
fun main() {
val c = Counter()
c.inc()
println("${NativeLib.load()}:${c.get()}")
}Beklenen çıktı
loaded: sqlite: 1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Yeni bellek modeli hangi işlemi gereksiz kıldı?
- Kütüphane yüklemeyi
- Sınıf tanımını
- Dondurmayı (freeze) Doğru cevap
- Coroutine başlatmayı
Açıklama: Yeni model döndürma gerekliliğini kaldırdı; paylaşım serbesttir.
2 load çağrısını tamamla
object NativeLib {
val name = "sqlite"
fun load(): String = "loaded: ${'$'}____"
}
object NativeLib {
val name = "sqlite"
fun load(): String = "loaded: ${'$'}name"
}
Açıklama: ${'$'}name ile kütüphane adı dizeye gömülür.
3 Native kavramlarını eşle
| Kavram | Anlamı |
|---|---|
Kotlin/Native |
JVM'siz ikili |
C interop |
C kütüphane bağlama |
Konan |
Derleyici |
framework |
iOS kütüphane |