CodeBlanks Logo Icon CodeBlanks

Extension vs subclass

Extension ve subclass farkını öğrenirsin.

Extension vs subclass

Extension ve subclass, bir türe işlev eklemenin iki yoludur. Extension, türün dışından metot ekler (kalıtım yok); subclass, türü genişletir (kalıtım vardır).

Extension avantajları: final sınıfları genişletebilir, kontrol etmediğin türlere işlev ekleyebilir. Subclass avantajları: durum ekleyebilir, override yapabilir, polymorphism sağlar. Hangisi kullanılacağı ihtiyaca bağlıdır.

Ne zaman hangisi?

Extension kullan: türe yalnızca yardımcı metot eklemek istediğinde, türün sahibi değilsen, kalıtım gerekmediğinde. Subclass kullan: türe yeni durum (alan) eklemek istediğinde, override yapacaksan, polymorphism gerekiyorsa.

Extension'lar durumsuzdur (stateless); yeni alan eklenemez. Subclass'lar durum ekleyebilir. Ayrıca extension'lar statik çözümlenir; subclass'lar dinamik. Bu nedenle polymorphism gerektiğinde subclass şarttır.

Uygulama StringShout extension

Bir StringShout extension'ı tanımla: on String olsun ve String shout() => toUpperCase() + '!'; metodu içersin. main içinde print('merhaba'.shout()); çağrısını ekle.

Başlangıç kodu

main.dart
void main() {
  // StringShout extension'ını tanımla (on String; shout metodu)
  // 'merhaba'.shout() yazdır
}

Örnek çözüm

main.dart
extension StringShout on String {
  String shout() => toUpperCase() + '!';
}

void main() {
  print('merhaba'.shout());
}

Beklenen çıktı

MERHABA!

Soru ve cevaplar

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

1 Extension on String

Soru
extension StringShout on ____ {
  String shout() => toUpperCase() + '!';
}
Cevap
extension StringShout on String {
  String shout() => toUpperCase() + '!';
}

Açıklama: extension StringShout on String, String'i genişletir.

2 Extension ve subclass farklarını eşleştir

Kavram Anlamı
Extension Kalıtım yok
Subclass Kalıtım var
Final sınıf Extension ile genişletilebilir
Polymorphism Subclass ile

3 Hangi durumda subclass yerine extension kullanılır?

  • Override yapmak için
  • Türe yeni alan eklemek için
  • Polymorphism için
  • Türe yalnızca yardımcı metot eklemek için Doğru cevap

Açıklama: extension yardımcı metot eklemek için idealdir.

Uzman bölümündeki tüm dersler