CodeBlanks Logo Icon CodeBlanks

Özet - Generic'ler

generic sınıf, fonksiyon ve variance'ı birleştirerek bir Stack<T> yazarsın.

Özet - Generic'ler

Bu grupta generic sınıf, generic fonksiyon, variance, type constraint ve reified'ı öğrendin. Hepsi tekrar kullanılabilirliği ve tür güvenliğini artırır.

Bu özette bir Stack<T> generic sınıfı yazacaksın. push ve pop metotları MutableList<T> kullanır. fun <T> of(vararg values: T): Stack<T> fabrika fonksiyonu da eklenecek. Tüm parçalar bir araya geldiğinde tür güvenli, tekrar kullanılabilir bir veri yapısı oluşur.

Uygulama Stack<T> generic sınıfı

class Stack<T> generic sınıfını tanımla. İçinde private val items: MutableList<T> = mutableListOf() özelliği olsun. fun push(item: T) metodu items.add(item) yapsın. fun pop(): T metodu items.removeAt(items.size - 1) döndürsün. main içinde val s = Stack<Int>() bildir, s.push(1) ve s.push(2) çağır, println(s.pop()) ile son ekleneni yazdır.

Başlangıç kodu

Main.kt
// Stack<T> generic sınıfı tanımı
// items adında mutable liste ile
// push ve pop metotları
// main'de Int ile örnekle ve pop yazdır

Örnek çözüm

Main.kt
class Stack<T> {
    private val items: MutableList<T> = mutableListOf()

    fun push(item: T) {
        items.add(item)
    }

    fun pop(): T {
        return items.removeAt(items.size - 1)
    }
}

fun main() {
    val s = Stack<Int>()
    s.push(1)
    s.push(2)
    println(s.pop())
}

Beklenen çıktı

2

Uygulama of fabrika fonksiyonu

Önceki addımdaki gibi class Stack<T> sınıfını tanımla (items, push, pop). Ayrıca fun <T> of(vararg values: T): Stack<T> generic fabrika fonksiyonu ekle; gövdesi val s = Stack<T>() bildirip for (v in values) s.push(v) yapsın ve s'yi döndürsün. main içinde val s = of(1, 2, 3) bildir ve println(s.pop()) ile son ekleneni yazdır.

Başlangıç kodu

Main.kt
class Stack<T> {
    private val items: MutableList<T> = mutableListOf()

    fun push(item: T) {
        items.add(item)
    }

    fun pop(): T {
        return items.removeAt(items.size - 1)
    }
}

// of generic fabrika fonksiyonunu ekle: vararg values al, Stack döndür

fun main() {
    // of ile Stack oluştur ve pop yazdır
}

Örnek çözüm

Main.kt
class Stack<T> {
    private val items: MutableList<T> = mutableListOf()

    fun push(item: T) {
        items.add(item)
    }

    fun pop(): T {
        return items.removeAt(items.size - 1)
    }
}

fun <T> of(vararg values: T): Stack<T> {
    val s = Stack<T>()
    for (v in values) s.push(v)
    return s
}

fun main() {
    val s = of(1, 2, 3)
    println(s.pop())
}

Beklenen çıktı

3

Soru ve cevaplar

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

1 Bir <strong>Stack&lt;T&gt;</strong> generic sınıfı neden uygundur?

  • Çünkü yalnızca Int tutar
  • Çünkü kalıtım gerektirmez
  • Çünkü tür güvenliğini devre dışı bırakır
  • Çünkü her tür için ayrı kod yazmayı önler Doğru cevap

Açıklama: generic Stack<T> her tür için tek tanımla çalışır; tekrarı önler.

2 generic fonksiyon tanımını tamamla

Soru
fun ____ ident(t: T): T {
    return t
}
Cevap
fun <T> ident(t: T): T {
    return t
}

Açıklama: fun <T> ident(t: T) generic fonksiyon tanımıdır.

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