Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

Desen 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: Bir classify parametresi alan ve Object açıklaması döndüren String adlı bir işlev oluştur. Bu durumları ele almak için desen eşleştirmeli bir switch ifadesi kullan:
    • Boş bir liste [], Empty list dö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 old döndürmeli (map deseni yapısökümünü kullan)
    • Negatif olan bir tamsayı (when yan tümcesini kullan), Negative: [value] döndürmeli
    • Sıfır olan bir tamsayı, Zero döndürmeli
    • Diğer tüm tamsayılar, Positive: [value] döndürmeli
    • Diğer tüm değerler, Unknown type döndürmeli
  • 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}
    • -10 tamsayısı
    • 0 tamsayısı
    • 99 tamsayısı

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: 99

Kendin 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
}
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