CodeBlanks Logo Icon CodeBlanks

Variance

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

Main.kt
// Producer arabirimi tanımı (kovaryans)
// IntProducer sınıfı ve produce metodu
// main'de Number olarak kullan ve yazdır

Örnek çözüm

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

Soru
interface Producer<____ T> {
    fun produce(): T
}
Cevap
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&lt;out T&gt;</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.

Orta seviye bölümündeki tüm dersler