Type constraints
- Dart kursu
- Orta seviye
- Ders 32/116
- 5 dk
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
// max<T extends num> metodunu tanımla
void main() {
// max<int>(3, 7) çağır ve yazdır
}Örnek çözüm
// 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
T max<T ____>(T a, T b) {
return a > b ? a : b;
}
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.