Variance
- Kotlin kursu
- Orta seviye
- Ders 49/116
- 5 dk
in, out ve variance kavramlarını öğrenirsin.
Variance
Variance, generic türler arasındaki alt-tür ilişkisini tanımlar. Kotlin'de out (kovaryans) ve in (kontravaryans) anahtar kelimeleri kullanılır.
Örnek: interface Producer<out T> { fun produce(): T }. out T demek T'nin yalnızca üreten (dışarı verilen) konumda kullanıldığıdır. Producer<Int>, Producer<Number>'ın alt türü olur. in T ise T'nin yalnızca tüketen (içeri alınan) konumda kullanıldığını belirtir. Variance, generic API'lerde esneklik sağlar.
out ve in farkı
out ve in farklı yönleri belirtir. out T türü yalnızca üretir; in T türü yalnızca tüketir.
Örnek: interface Producer<out T> { fun produce(): T }; interface Consumer<in T> { fun consume(t: T) }. Producer<Int> bir Producer<Number> olarak kullanılabilir (Int, Number'ın alt türüdür). Consumer<Number> bir Consumer<Int> olarak kullanılabilir. Variance sayesinde generic türler alt-tür hiyerarşisine uyumlu olur. Bu, fonksiyon parametrelerinde esneklik sağlar.
Uygulama Producer<T> generic arabirimi
interface Producer<out T> arabirimini tanımla; içinde fun produce(): T metodu olsun. class IntProducer(val value: Int) : Producer<Int> sınıfı tanımla; override fun produce(): Int = value yaz. main içinde val p: Producer<Number> = IntProducer(42) bildir ve println(p.produce()) ile sonucu yazdır.
Başlangıç kodu
// Producer arabirimi tanımı (kovaryans)
// IntProducer sınıfı ve produce metodu
// main'de Number olarak kullan ve yazdırÖrnek çözüm
interface Producer<out T> {
fun produce(): T
}
class IntProducer(val value: Int) : Producer<Int> {
override fun produce(): Int = value
}
fun main() {
val p: Producer<Number> = IntProducer(42)
println(p.produce())
}Beklenen çıktı
42
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 out variance tanımını tamamla
interface Producer<____ T> {
fun produce(): T
}
interface Producer<out T> {
fun produce(): T
}
Açıklama: out T üretici konumunu belirtir.
2 variance parçalarını eşle
| Kavram | Anlamı |
|---|---|
out T |
Üretici (kovaryans) |
in T |
Tüketici (kontravaryans) |
fun produce(): T |
Üreten metot |
fun consume(t: T) |
Tüketen metot |
3 <code>interface Producer<out T></code> bildiriminde <code>out</code> neyi belirtir?
- T'nin yalnızca üretildiğini Doğru cevap
- T'nin yalnızca tüketildiğini
- T'nin değiştirilebilir olduğunu
- T'nin nullable olduğunu
Açıklama: out T, T'nin yalnızca üretildiğini belirtir.