Plugin vs KSP
- Kotlin kursu
- Uzman
- Ders 15/47
- 5 dk
Compiler plugin ve KSP farkını öğrenirsin.
Plugin ve KSP farkı
Compiler plugin ile KSP her ikisi de derleme zamanında çalışır ama güç ve karmaşıklıkları farklıdır. KSP yalnızca sembolleri okur; plugin tüm AST'yi dönüştürebilir.
KSP daha basit ve kararlıdır; kod üretmek için idealdir (Room, Moshi). Plugin daha güçlüdür ama daha karmaşıktır; mevcut kodu değiştirmek için gereklidir (all-open, no-arg, compose). Plugin, KSP'nin sunmadığı sınıf open yapma, sentetik kurucu ekleme ve IR dönüşümü sağlar. Yeni bir araç yaparken önce KSP yeterli mi diye sor; yetmiyorsa plugin düşün.
Ne zaman hangisi?
Eğer yalnızca yeni kod üreteceksen KSP yeterlidir. Eğer mevcut sınıfları değiştirmen gerekiyorsa (open yapmak, kurucu eklemek, IR'yi dönüştürmek) plugin gerekir.
Örnek: bir @Entity annotation'ından DAO üretmek için KSP yeterlidir. Ama Spring'in @Configuration'ını CGLIB proxy'si için open yapmak gerekiyorsa all-open plugin'i kullanılır. Compose gibi UI framework'leri @Composable fonksiyonları derleme sırasında dönüştürmek için plugin kullanır. Bu fark, mimari kararlarını etkiler.
Uygulama Mod karşılaştırması yaz
data class Mode(val name: String, val level: String) tanımla. main içinde listOf(Mode("Plugin", "AST"), Mode("KSP", "Symbol")) oluştur. Her biri için println("${'$'}{it.name}: ${'$'}{it.level}") yaz.
Başlangıç kodu
// Mode veri sınıfını ekle
fun main() {
// iki mod oluştur ve yazdır
}Örnek çözüm
data class Mode(val name: String, val level: String)
fun main() {
val modes = listOf(Mode("Plugin", "AST"), Mode("KSP", "Symbol"))
modes.forEach { println("${it.name}: ${it.level}") }
}Beklenen çıktı
Plugin: AST KSP: Symbol
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Plugin ve KSP eşle
| Kavram | Anlamı |
|---|---|
KSP |
Sembol okuma |
Plugin |
AST dönüşümü |
all-open |
Sınıfı open yapar |
Room |
KSP kullanan kütüphane |
2 Bir sınıfı open yapmak için hangisi gerekir?
- Yalnızca KSP
- Compiler plugin (all-open) Doğru cevap
- Runtime reflection
- Yalnızca IDE ayarı
Açıklama: Sınıfı open yapmak mevcut kodu değiştirir; bu ancak plugin ile yapılır.
3 Mod listesini tamamla
val modes = listOf(Mode("Plugin", "AST"), Mode("____", "Symbol"))
val modes = listOf(Mode("Plugin", "AST"), Mode("KSP", "Symbol"))
Açıklama: KSP sembol düzeyinde çalışır.