Özet - Generic'ler
- Kotlin kursu
- Orta seviye
- Ders 52/116
- 5 dk
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
// 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
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
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
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<T></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
fun ____ ident(t: T): T {
return t
}
fun <T> ident(t: T): T {
return t
}
Açıklama: fun <T> ident(t: T) generic fonksiyon tanımıdır.