CodeBlanks Logo Icon CodeBlanks

Type constraints

extends ile tür kısıtları öğrenirsin.

Type constraint (extends)

Bazen T'nin her tür değil, yalnızca belirli bir alt küme olması gerekir. Bunun için tür parametresine extends ile bir üst sınır (bound) verilir: <T extends num>.

Örnek: T max<T extends num>(T a, T b) { return a > b ? a : b; }. Burada T yalnızca num alt türleri olabilir; yani int veya double. > karşılaştırması num üzerinde tanımlı olduğundan derlenir. Kısıt olmadan T her şey olabileceğinden > kullanılamazdı. Constraint, generic koda güçlü bir sözleşme kazandırır.

Neden kısıt?

Kısıt olmadan T tüm türleri kapsar; ama bu, T üzerinde yalnızca Object'in metotlarını çağırabileceğin anlamına gelir. +, -, > gibi işlemler derleme hatası verir.

<T extends num> yazdığında Dart, T'nin num davranışını taşıdığını bilir; +, -, > ve compareTo kullanılabilir. Bu, matematiksel yardımcı metotları generic ve tür güvenli yazmanın yoludur. Örneğin ortalama, en büyük, en küçük metotları T extends num ile her sayı türü için tek tanımda çalışır.

Uygulama max<T extends num> metodunu yaz

T max<T extends num>(T a, T b) adında kısıtlı bir generic metot tanımla; gövdesi return a > b ? a : b; olsun. main içinde print(max<int>(3, 7)); çağrısı yap.

Başlangıç kodu

main.dart
// max<T extends num> metodunu tanımla

void main() {
  // max<int>(3, 7) çağır ve yazdır
}

Örnek çözüm

main.dart
// max<T extends num> metodunu tanımla
T max<T extends num>(T a, T b) {
  return a > b ? a : b;
}

void main() {
  print(max<int>(3, 7));
}

Beklenen çıktı

7

Soru ve cevaplar

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

1 Constraint parçalarını eşle

Kavram Anlamı
extends Kısıt anahtarı
T Tür parametresi
num Üst sınır

2 <T extends num> kısıtı ne sağlar?

  • T yalnızca String olabilir
  • T yalnızca bool olabilir
  • T her tür olabilir
  • T yalnızca num (int veya double) olabilir Doğru cevap

Açıklama: extends num, T'yi int ve double ile sınırlar.

3 max metoduna kısıt ekle

Soru
T max<T ____>(T a, T b) {
  return a > b ? a : b;
}
Cevap
T max<T extends num>(T a, T b) {
  return a > b ? a : b;
}

Açıklama: <T extends num> kısıtı max metodunu sayılarla sınırlar.

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