CodeBlanks Logo Icon CodeBlanks

Özet - Generic'ler

generic sınıf, metot ve koleksiyonları birleştirerek bir Stack<T> yazarsın.

Özet - Generic'ler

Bu grupta generic'lerin tüm araçlarını gördün: generic sınıf, generic metot, type constraint, generic koleksiyon ve generic vs dynamic. Şimdi bunları bir generic yığın (stack) sisteminde birleştireceğiz.

İlk adımda Stack<T> adında, push ve pop metotları olan bir generic yığın yazacağız. İkinci adımda <T extends num> kısıdını ekleyerek NumberBox sınıfını sayılara özeleceğiz. Bu iki örnek, generic'lerin gücünü tek bir akışta gösterir: tür güvenliği ve yeniden kullanım bir arada.

Uygulama Generic Stack<T> sınıfını yaz

Stack<T> adında bir generic sınıf tanımla. İçinde final List<T> _items = []; alanı olsun. void push(T v) metodu _items.add(v) yapsın; T pop() metodu return _items.removeLast(); dönsün. main içinde var s = Stack<int>(); oluştur, s.push(1), s.push(2), s.push(3) çağır ve print(s.pop()) yap.

Başlangıç kodu

main.dart
// Stack<T> sınıfını tanımla
// push ve pop metotları ekle

void main() {
  // Stack<int> oluştur, push ve pop yap
}

Örnek çözüm

main.dart
// Stack<T> sınıfını tanımla
class Stack<T> {
  final List<T> _items = [];
  void push(T v) {
    _items.add(v);
  }
  T pop() {
    return _items.removeLast();
  }
}

void main() {
  var s = Stack<int>();
  s.push(1);
  s.push(2);
  s.push(3);
  print(s.pop());
}

Beklenen çıktı

3

Kısıtlı generic: NumberBox<T extends num>

İkinci adımda <T extends num> kısıdını kullanarak generic sınıfı sayılara özeleceğiz. NumberBox<T extends num> yalnızca int ve double kabul eder; böylece + gibi işlemler derleme zamanında güvenli kullanılır.

Örnek: class NumberBox<T extends num> { final T value; NumberBox(this.value); num sum(T other) { return value + other; } }. Burada value + other derlenir çünkü her ikisi de num davranışı taşır. NumberBox<int>(5).sum(3) çağrımı 8 döner. Bu, generic sınıfa constraint eklemenin gerçek bir örneğidir.

Uygulama NumberBox<T extends num> sınıfını yaz

NumberBox<T extends num> adında kısıtlı bir generic sınıf tanımla. İçinde final T value alanı ve NumberBox(this.value) yapıcısı olsun. num sum(T other) metodu return value + other; dönsün. main içinde var b = NumberBox<int>(5); oluştur ve print(b.sum(3)) çağrısı yap.

Başlangıç kodu

main.dart
// NumberBox<T extends num> sınıfını tanımla
// sum metodu ekle

void main() {
  // NumberBox<int>(5) oluştur ve sum(3) yazdır
}

Örnek çözüm

main.dart
// NumberBox<T extends num> sınıfını tanımla
class NumberBox<T extends num> {
  final T value;
  NumberBox(this.value);
  num sum(T other) {
    return value + other;
  }
}

void main() {
  var b = NumberBox<int>(5);
  print(b.sum(3));
}

Beklenen çıktı

8

Soru ve cevaplar

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

1 Generic Stack<T> için hangisi doğrudur?

  • Stack<T> yapıcı içeremez
  • Stack<T> yalnızca int türüyle çalışır
  • Stack<T> tüm türlerle çalışır; tür güvenliği sağlar Doğru cevap
  • Stack<T> dynamic ile aynıdır

Açıklama: Stack<T> her türle çalışır ve derleme zamanında tür güvenliği verir.

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