Desenler ve Eşleştirme (3.0)
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 87 / 110.
Dart 3, tek bir ifade içinde verilerin yapısını çözümlemenin ve incelemenin güçlü bir yolu olan desen eşleştirmeyi kullanıma sundu. Desenler, değerleri ayıklamanıza, nesnelerin yapısını kontrol etmenize ve değişkenleri aynı anda bağlamanıza olanak tanır.
Kayıtlarla temel yapı bozmayı zaten gördün. Desenler bunu nesneler, listeler ve haritalarla çalışacak şekilde genişletir:
void main() {
// Liste kalıpları
var numbers = [1, 2, 3];
var [a, b, c] = numbers;
print('$a, $b, $c'); // 1, 2, 3
// Map kalıpları
var user = {'name': 'Alice', 'age': 30};
var {'name': name, 'age': age} = user;
print('$name is $age'); // Alice 30 yaşında
}Örüntüler, switch ifadelerinde özellikle güçlü hâle gelir. Tür, değer ve yapı üzerinde aynı anda eşleştirme yapabilirsin:
String describe(Object obj) {
return switch (obj) {
int n when n < 0 => 'Negative number',
int n => 'Positive number: $n',
String s => 'String of length ${s.length}',
[int first, ...] => 'List starting with $first',
_ => 'Something else',
};
}
void main() {
print(describe(-5)); // Negatif sayı
print(describe(42)); // Pozitif sayı: 42
print(describe([1, 2, 3])); // List starting with 1
}when yan tümcesi kalıplara koşullar ekler ve ... bir listedeki kalan öğelerle eşleşir. Alt çizgi _, her şeyle eşleşen bir joker karakter olarak işlev görür. Mühürlü sınıflarla birlikte kalıplar, karmaşık veri yapılarını eksiksiz ve tür güvenli bir şekilde işlemeyi mümkün kılar.
Görev
KolayDesen eşleştirmeyi kullanarak farklı girdi türlerini analiz edip kategorilere ayıran bir veri sınıflandırıcısı oluşturalım! Dart 3'ün güçlü desen eşleştirme özelliklerini kullanarak çeşitli veri yapılarını tanımlayıp açıklayabilen bir sistem oluşturacaksın.
Kodunu iki dosyada düzenleyeceksin:
classifier.dart: Birclassifyparametresi alan veObjectaçıklaması döndürenStringadlı bir işlev oluştur. Bu durumları ele almak için desen eşleştirmeli bir switch ifadesi kullan:- Boş bir liste
[],Empty listdöndürmeli - Tam olarak bir tamsayı öğesi içeren bir liste,
Single item: [value]döndürmeli - Tam olarak iki öğe içeren bir liste,
Pair: [first] and [second]döndürmeli - Bir tamsayıyla başlayıp daha fazla öğe içeren bir liste,
List starting with [first], length: [total length]döndürmeli (...kalan desenini kullan) - Hem
'name'hem de'age'anahtarlarını içeren bir map,[name] is [age] years olddöndürmeli (map deseni yapısökümünü kullan) - Negatif olan bir tamsayı (
whenyan tümcesini kullan),Negative: [value]döndürmeli - Sıfır olan bir tamsayı,
Zerodöndürmeli - Diğer tüm tamsayılar,
Positive: [value]döndürmeli - Diğer tüm değerler,
Unknown typedöndürmeli
- Boş bir liste
main.dart: Sınıflandırıcını içe aktar ve çeşitli girdilerle desen eşleştirmeyi göster. Aşağıdaki değerlerin her birini sınıflandırmanın sonucunu yazdır:- Boş bir liste
[] - Bir öğeli bir liste:
[42] - İki öğeli bir liste:
['hello', 'world'] - Daha uzun bir liste:
[1, 2, 3, 4, 5] - Bir map:
{'name': 'Alice', 'age': 25} -10tamsayısı0tamsayısı99tamsayısı
- Boş bir liste
Bu görev; liste desenlerini, map desenlerini, korumalar için when yan tümcesini ve kalan desenini (...) bir araya getirir — dersteki tüm temel desen eşleştirme özelliklerini!
Beklenen çıktı:
Empty list
Single item: 42
Pair: hello and world
List starting with 1, length: 5
Alice is 25 years old
Negative: -10
Zero
Positive: 99Kendin dene
import 'classifier.dart';
void main() {
// TODO: Her değeri kategorize etmek için classify fonksiyonunu kullan
// ve sonuçları yazdır
// Boş bir liste ile test et
print(classify([]));
// TODO: Tek eleman içeren bir liste ile test et: [42]
// TODO: İki eleman içeren bir liste ile test et: ['hello', 'world']
// TODO: Daha uzun bir liste ile test et: [1, 2, 3, 4, 5]
// TODO: Bir map ile test et: {'name': 'Alice', 'age': 25}
// TODO: Tamsayı -10 ile test et
// TODO: Tamsayı 0 ile test et
// TODO: Tamsayı 99 ile 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
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