Özet - Compiler plugin
- Kotlin kursu
- Uzman
- Ders 18/47
- 5 dk
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
// Entity ve User sınıflarını ekle
fun main() {
// çokbiçimli çağrıyı yazdır
}Örnek çözüm
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
open class Entity(val id: Int) {
open fun ____(): String = "Entity"
}
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 |