CodeBlanks Logo Icon CodeBlanks

Özet - Kotlin/Native

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

Main.kt
// Counter ve NativeLib tanımlarını ekle

fun main() {
    // Counter'ı artır, NativeLib'i yükle ve yazdır
}

Örnek çözüm

Main.kt
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

Soru
object NativeLib {
    val name = "sqlite"
    fun load(): String = "loaded: ${'$'}____"
}
Cevap
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

Uzman bölümündeki tüm dersler