Extension method
- Dart kursu
- Uzman
- Ders 20/47
- 5 dk
Extension method yazmayı öğrenirsin.
Extension method
Extension method, bir extension içinde tanımlanan metottur. Hedef türün bir örneği üzerinden this ile erişilir. extension StringRepeat on String { String repeat(int n) => ... } tanımı, 'ab'.repeat(3) çağrısını sağlar.
Extension metotları, sınıf metotları gibi kullanılır. Ancak override edilemezler ve alt sınıflarda değiştirilemezler. Çünkü extension'lar derleme anında statik olarak çözümlenir; bu nedenle dinamik dispatch (polymorphism) yoktur.
this ve extension
Bir extension metodunun içinde this, metodun çağrıldığı örneğe işaret eder. extension on int { int doubled() => this * 2; } tanımında this çağrılan int değeridir. 5.doubled() çağrısında this 5'tir.
Extension metodları aynı kapsamdaki diğer metotları çağırabilir. Ayrıca extension içinde birden çok metot tanımlanabilir. Extension adı yalnızca belgeleme ve çakışma önleme içindir; çağrıyı etkilemez.
Uygulama ListSum extension
Bir ListSum extension'ı tanımla: on List<int> olsun ve int total() => fold(0, (a, b) => a + b); metodu içersin. main içinde print([1, 2, 3].total()); çağrısını ekle.
Başlangıç kodu
void main() {
// ListSum extension'ını tanımla (on List<int>; total metodu)
// [1, 2, 3].total() yazdır
}Örnek çözüm
extension ListSum on List<int> {
int total() => fold(0, (a, b) => a + b);
}
void main() {
print([1, 2, 3].total());
}Beklenen çıktı
6
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Extension metodu çağrısı
final result = 'ab'.____(3);
print(result);
final result = 'ab'.repeat(3);
print(result);
Açıklama: 'ab'.repeat(3) extension metodunu çağırır.
2 Extension metotları nasıl çözümlenir?
- Derleme anında statik Doğru cevap
- Yalnızca alt sınıfta
- Çalışma anında dinamik
- Hiç çözümlenmez
Açıklama: extension metotları derleme anında statik olarak çözümlenir.
3 Extension metod parçalarını eşleştir
| Kavram | Anlamı |
|---|---|
this |
Çağrılan örnek |
on Type |
Hedef tür |
static |
Çözümleme biçimi |
override |
Geçersiz |