Özet - Generic'ler
- Dart kursu
- Orta seviye
- Ders 35/116
- 5 dk
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
// 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
// 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
// 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
// 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.