Menu
Coddy logo textTech

Genişletme Metotları

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 83 / 110.

Bazen sahibi olmadığın bir sınıfa (Dart’ın yerleşik String veya int türleri gibi) işlevsellik eklemek istersin. Bu sınıfların kaynak kodunu değiştiremezsin ve kalıtım da final sınıflar için yardımcı olmaz. İşte extension methods burada devreye girer.

Uzantılar, mevcut türleri değiştirmeden veya alt sınıflar oluşturmadan onlara yeni yöntemler eklemenizi sağlar:

extension StringExtras on String {
  String reverse() {
    return split('').reversed.join('');
  }
  
  bool get isPalindrome {
    var cleaned = toLowerCase().replaceAll(' ', '');
    return cleaned == cleaned.split('').reversed.join('');
  }
}

void main() {
  print('hello'.reverse());        // olleh
  print('radar'.isPalindrome);     // true
}

Söz dizimi extension ExtensionName on Type şeklindedir. İçerisinde, tıpkı normal bir sınıfta olduğu gibi metotlar ve getter'lar tanımlarsınız. Tanımlandıktan sonra, bu metotlar sanki yerleşikmiş gibi o türün tüm örneklerinde görünür.

Uzantılar, kendi sınıflarınız ve genel türler de dahil olmak üzere her tür üzerinde çalışır:

extension IntExtras on int {
  int squared() => this * this;
}

extension ListExtras<T> on List<T> {
  T? get secondOrNull => length >= 2 ? this[1] : null;
}

void main() {
  print(5.squared());                    // 25
  print([1, 2, 3].secondOrNull);         // 2
}

Bir uzantının içinde this ifadesinin, yöntemin çağrıldığı örneğe başvurduğuna dikkat edin. Uzantılar, kodunuzu düzenli ve okunabilir tutarken mevcut türleri geliştirmenin temiz bir yoludur.

challenge icon

Görev

Kolay

Uzantı yöntemlerini kullanarak Dart'ın yerleşik türlerini yararlı işlevlerle geliştirelim! String ve List türlerine yardımcı yöntemler ekleyen uzantılar oluşturacak, ardından bunları ana dosyanızda kullanacaksınız.

Kodunuzu iki dosyada düzenleyeceksiniz:

  • extensions.dart: Mevcut türlere yeni özellikler ekleyen iki uzantı oluşturun:
    • StringUtils üzerinde String adlı bir uzantı:
      • Dizedeki sesli harflerin (a, e, i, o, u - büyük/küçük harfe duyarsız) sayısını döndüren countVowels() yöntemi
      • Boşluklarla ayrılmış her kelimenin ilk harfini döndüren, bunları birleştirip büyük harfe çeviren initials alıcısı. Örneğin, "hello world" ifadesi "HW" olur
    • ListUtils<T> üzerinde List<T> adlı bir uzantı:
      • Belirtilen dizin mevcutsa o dizindeki öğeyi, dizin sınırlar dışındaysa safeGet(int index) döndüren null yöntemi
      • Listenin birden fazla öğesi varsa hasMultiple döndüren true alıcısı
  • main.dart: Uzantılarınızı içe aktarın ve çalışmalarını gösterin:
    • "Object Oriented Programming" dizesini oluşturun ve sesli harf sayısını şu biçimde yazdırın: Vowels: [count]
    • Aynı dizenin baş harflerini şu biçimde yazdırın: Initials: [initials]
    • [10, 20, 30] tamsayı listesini oluşturun
    • safeGet(1) sonucunu şu biçimde yazdırın: Element at 1: [value]
    • safeGet(5) sonucunu şu biçimde yazdırın: Element at 5: [value]
    • Listenin birden fazla öğeye sahip olup olmadığını şu biçimde yazdırın: Has multiple: [true/false]

Bir uzantının içinde this ifadesinin, yöntemin çağrıldığı örneği ifade ettiğini unutmayın. Uzantılarınız, bu türlerin bu yöntemler yerleşikmiş gibi hissettirmesini sağlayacak!

Beklenen çıktı:

Vowels: 9
Initials: OOP
Element at 1: 20
Element at 5: null
Has multiple: true

Kendin dene

import 'extensions.dart';

void main() {
  // String'i oluşturun
  String text = "Object Oriented Programming";

  // TODO: countVowels() kullanarak sesli harf sayısını yazdırın
  // Format: Vowels: [count]

  // TODO: initials getter'ını kullanarak baş harfleri yazdırın
  // Format: Initials: [initials]

  // Tam sayı listesini oluşturun
  List<int> numbers = [10, 20, 30];

  // TODO: safeGet(1) sonucunu yazdırın
  // Format: Element at 1: [value]

  // TODO: safeGet(5) sonucunu yazdırın
  // Format: Element at 5: [value]

  // TODO: Listenin birden fazla öğeye sahip olup olmadığını yazdırın
  // Format: Has multiple: [true/false]
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Dart derleyicisi