CodeBlanks Logo Icon CodeBlanks

Özet - Compiler plugin

IR, all-open ve no-arg'ı birleştirerek bir framework entegrasyonu yazarsın.

Özet - Compiler plugin

Bu grupta compiler plugin, IR, plugin vs KSP, all-open ve no-arg kavramlarını öğrendin. Şimdi bunları birleştiren bir model yazacaksın: open bir Entity ve onun alt sınıfı.

Yazacağın Entity açık (open) olacak; tag() metodu da açık. User alt sınıfı tag()'i geçersiz kılacak. main'de çokbiçimli bir atama yapıp sonucu yazdıracaksın. Bu, all-open ile no-arg'ın birleştiği tipik bir entity senaryosudur.

Birleştirme: open Entity

Şimdi all-open'ın yaptığı şeyi elle yapacağız: Entity'yi ve tag()'i open işaretle. Sonra bir alt sınıf ekle.

Örnek: open class Entity(val id: Int) { open fun tag(): String = "Entity" }. class User(id: Int) : Entity(id) { override fun tag(): String = "User" }. Atama val e: Entity = User(7); çağrı e.tag() ise "User" döner. Çokbiçimli davranış budur. all-open plugin'i bunu otomatik yapar; biz modelliyoruz. Bu yapı, framework proxy'lerinin temelidir.

Uygulama Open Entity + User yaz

open class Entity(val id: Int) tanımla; open fun tag(): String = "Entity" metodu olsun. class User(id: Int) : Entity(id) tanımla; override fun tag(): String = "User" metodu olsun. main içinde val e: Entity = User(7) ve println("${'$'}{e.tag()}:${'$'}{e.id}") yaz.

Başlangıç kodu

Main.kt
// Entity ve User sınıflarını ekle

fun main() {
    // çokbiçimli çağrıyı yazdır
}

Örnek çözüm

Main.kt
open class Entity(val id: Int) {
    open fun tag(): String = "Entity"
}
class User(id: Int) : Entity(id) {
    override fun tag(): String = "User"
}
fun main() {
    val e: Entity = User(7)
    println("${e.tag()}:${e.id}")
}

Beklenen çıktı

User:7

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Hangi işlem yalnızca plugin ile yapılır?

  • Annotation okumak
  • Sınıfı open yapmak Doğru cevap
  • Yeni dosya üretmek
  • Liste dönmek

Açıklama: Sınıfı open yapmak mevcut kodu değiştirir; bu ancak plugin ile mümkün.

2 tag metodunu tamamla

Soru
open class Entity(val id: Int) {
    open fun ____(): String = "Entity"
}
Cevap
open class Entity(val id: Int) {
    open fun tag(): String = "Entity"
}

Açıklama: tag() entity türünü döner.

3 Plugin kavramlarını eşle

Kavram Anlamı
all-open Sınıfı open yapar
no-arg Sentetik kurucu ekler
IR Ara sunum
compose Composable dönüştürür

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