Menu
Coddy logo textTech

'firstWhere' ile Bulma

Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 15 / 65.

Bir listede belirli kriterleri karşılayan özel bir öğe bulmanız gerektiğinde, firstWhere() yöntemi verimli bir çözüm sunar. Eşleşen tüm öğeleri döndüren filtreleme yöntemlerinin aksine, firstWhere() koşulunuzu sağlayan ilk öğeyi bulur bulmaz aramayı durdurur.

firstWhere() yöntemi, her bir öğe için true veya false döndüren bir test fonksiyonu alır. Testi geçen ilk öğeyi bulana kadar öğeleri tek tek inceler ve ardından hemen o öğeyi döndürür.

List<int> numbers = [1, 3, 8, 15, 22, 7];

// İlk çift sayıyı bul
int firstEven = numbers.firstWhere((number) => number % 2 == 0);
print(firstEven);  // 8

Hiçbir öğenin koşulunuzla eşleşmediği durumlar için firstWhere(), isteğe bağlı bir orElse parametresi sunar. Bu parametre, eşleşme bulunamadığında varsayılan bir değer döndüren bir fonksiyonu kabul ederek programınızın bir hatayla çökmesini önler.

challenge icon

Görev

Kolay

Acil müdahale gerektiren ilk müşteri şikâyetini bularak bir müşteri hizmetleri sistemini yöneten bir program oluşturun. Programınız şunları yapmalıdır:

  1. Bölüm adını temsil eden bir dize girdisi okuyun
  2. Şikâyet öncelik düzeylerini temsil eden birden çok tamsayı girdisi okuyun (girdi, -1 alındığında sona erecektir)
  3. Acil öncelik eşiğini temsil eden bir tamsayı girdisi okuyun
  4. Acil eşikten büyük veya eşit öncelik düzeyine sahip ilk şikâyeti bulmak için firstWhere() yöntemini kullanın
  5. Müşteri hizmetleri sonuçlarını aşağıda gösterilen tam biçimde yazdırın

Örneğin, bölüm adı "Technical Support", öncelik düzeyleri 3, 7, 2, 9, 4 ve acil eşik 8 ise programınız şu çıktıyı vermelidir:

Department: Technical Support
All complaints: [3, 7, 2, 9, 4]
Urgent threshold: 8
Searching for first complaint >= 8
First urgent complaint: 9
Status: Urgent complaint found - immediate action required

Bölüm adı "Billing Department", öncelik düzeyleri 4, 6, 3, 5 ve acil eşik 7 ise programınız şu çıktıyı vermelidir:

Department: Billing Department
All complaints: [4, 6, 3, 5]
Urgent threshold: 7
Searching for first complaint >= 7
First urgent complaint: Not found
Status: No urgent complaints - continue normal processing

Bölüm adı "Sales Support", öncelik düzeyleri 10, 2, 8 ve acil eşik 9 ise programınız şu çıktıyı vermelidir:

Department: Sales Support
All complaints: [10, 2, 8]
Urgent threshold: 9
Searching for first complaint >= 9
First urgent complaint: 10
Status: Urgent complaint found - immediate action required

Programınız, acil eşikten büyük veya eşit olan ilk şikâyet önceliğini bulmak için firstWhere() yöntemini kullanmalıdır. Acil bir şikâyet bulunamazsa ilk acil şikâyet için "Not found" görüntüleyin ve durum olarak "No urgent complaints - continue normal processing" gösterin. Acil bir şikâyet bulunursa öncelik düzeyini görüntüleyin ve durum olarak "Urgent complaint found - immediate action required" gösterin.

Kendin dene

import 'dart:io';

void main() {
  // Departman adını oku
  String? department = stdin.readLineSync();
  
  // -1 gelene kadar şikayet öncelik seviyelerini oku
  List<int> complaints = [];
  while (true) {
    int priority = int.parse(stdin.readLineSync()!);
    if (priority == -1) break;
    complaints.add(priority);
  }
  
  // Acil durum eşiğini oku
  int urgentThreshold = int.parse(stdin.readLineSync()!);
  
  // TODO: Kodunuzu aşağıya yazın
  // urgentThreshold değerine eşit veya büyük olan ilk şikayeti bulmak için firstWhere() metodunu kullanın
  
  // Sonuçları yazdır
  print('Department: $department');
  print('All complaints: $complaints');
  print('Urgent threshold: $urgentThreshold');
  print('Searching for first complaint >= $urgentThreshold');
  // İlk acil şikayet sonucunu yazdır
  // Durum mesajını yazdır
}
quiz iconKendini test et

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

Mantık & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Dart derleyicisi