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 şikayetini bularak bir müşteri hizmetleri sistemini yöneten bir program oluşturun. Programınız şunları yapmalıdır:

  1. Departman adını temsil eden bir dize (string) girdisi okuyun
  2. Şikayet öncelik seviyelerini temsil eden birden fazla tam sayı (integer) girdisi okuyun (girdi -1 değerini aldığınızda sona erecektir)
  3. Acil öncelik eşiğini temsil eden bir tam sayı girdisi okuyun
  4. Acil eşiğe eşit veya bu eşikten büyük öncelik seviyesine sahip ilk şikayeti bulmak için firstWhere() metodunu kullanın
  5. Müşteri hizmetleri sonuçlarını aşağıda gösterilen tam formatta yazdırın

Örneğin, departman adı "Technical Support", öncelik seviyeleri 3, 7, 2, 9, 4 ve acil eşik 8 ise, programınızın çıktısı şöyle olmalıdır:

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

Eğer departman adı "Billing Department", öncelik seviyeleri 4, 6, 3, 5 ve acil eşik 7 ise, programınızın çıktısı şöyle olmalıdır:

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

Eğer departman adı "Sales Support", öncelik seviyeleri 10, 2, 8 ve acil eşik 9 ise, programınızın çıktısı şöyle olmalıdır:

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şiğe eşit veya bu eşikten büyük olan ilk şikayet önceliğini bulmak için firstWhere() metodunu kullanmalıdır. Acil bir şikayet bulunamazsa, ilk acil şikayet için "Not found" yazdırın ve durum olarak "No urgent complaints - continue normal processing" gösterin. Acil bir şikayet bulunursa, öncelik seviyesini yazdırın ve durum olarak "Urgent complaint found - immediate action required" gösterin.

Kopya kağıdı

firstWhere() yöntemi, bir listede belirli bir koşulu karşılayan ilk öğeyi bulur. Bir eşleşme bulur bulmaz aramayı durdurur ve o öğeyi döndürür.

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

// Find the first even number
int firstEven = numbers.firstWhere((number) => number % 2 == 0);
print(firstEven);  // 8

Hiçbir öğe koşulla eşleşmediğinde varsayılan bir değer sağlamak için orElse parametresini kullanın:

// Returns a default value if no match is found
int result = numbers.firstWhere(
  (number) => number > 100,
  orElse: () => -1
);

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