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.
Görev
KolayUzantı 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üzerindeStringadlı 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
initialsalıcısı. Örneğin,"hello world"ifadesi"HW"olur
- Dizedeki sesli harflerin (a, e, i, o, u - büyük/küçük harfe duyarsız) sayısını döndüren
ListUtils<T>üzerindeList<T>adlı bir uzantı:- Belirtilen dizin mevcutsa o dizindeki öğeyi, dizin sınırlar dışındaysa
safeGet(int index)döndürennullyöntemi - Listenin birden fazla öğesi varsa
hasMultipledöndürentruealıcısı
- Belirtilen dizin mevcutsa o dizindeki öğeyi, dizin sınırlar dışındaysa
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şturunsafeGet(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: trueKendin 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]
}
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
1Nesne Tabanlı Programlamanın Temelleri
Harici DosyalarKütüphaneler ve İçe AktarmalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar SözcüğüMetotlarÖrnek DeğişkenleriYapıcıların TemelleriTekrar - Basit Hesap Makinesi4Null Güvenliği
Null Güvenliğine GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Sözcüğü ve Null GüvenliğiNull-Aware OperatörlerSınıflarda Null GüvenliğiTekrar - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulamak ve GenişletmekBirden Çok ArayüzTekrar - Şekil Hesaplayıcı10Koleksiyonlar ve Generics
List, Set, Map Genel BakışTür Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorTekrar - Generic Depolama13İleri Düzey OOP Kavramları
Kompozisyon ve KalıtımGenişletme MetotlarıÇağrılabilir SınıflarMühürlü Sınıflar (Dart 3)Kayıtlar (Dart 3)Desenler ve Eşleştirme (3.0)Metot İçeren Enum'lar2Dart'ta Yapıcılar
Varsayılan YapıcıAdlandırılmış YapıcılarBaşlatıcı ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Ön Ek KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DerinliğiBilgi GizlemeTekrar - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Çok Mixin KullanımıMixin'lerde on Anahtar SözcüğüMixin ve Kalıtım KarşılaştırmasıMixin ve Arayüz KarşılaştırmasıÖzet - Hayvan Sistemi11Özel Metotlar
toString() Geçersiz KılmahashCode & == Geçersiz KılmaComparable Arayüzücall() MetodunoSuchMethod Geçersiz KılmaÖzet - Özel Koleksiyon14Tasarım Desenleri Bölüm 1
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy Deseni3Sınıf Özellikleri
Örnek ve Static ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatic Metotlar ve AlanlarGetter ve Setter'larÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar SözcüğüMetot Geçersiz Kılma@override Açıklamasıfinal Sınıf Anahtar SözcüğüKurucular ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriArayüzler Yoluyla Çok BiçimlilikÇalışma Zamanı Tür Denetimiis ve as OperatörleriCovariant Anahtar KelimesiTekrar - Ödeme İşlemcisi12Asenkron OOP
Future'ler ve async/awaitStream TemelleriStream DenetleyicileriAsenkron YapıcılarSınıf Metotlarında AsenkronlukÖzet - Veri Getirici15Tasarım Desenleri Bölüm 2
Komut DeseniAdaptör DeseniDekoratör DeseniŞablon Metot DeseniDurum DeseniBileşik DesenDepo DeseniKendi başına pratik yap: Online Dart derleyicisi