CodeBlanks Logo Icon CodeBlanks

Arama ve filtreleme

Koleksiyon metotlarıyla arama ve filtreleme yazarsın.

search metodu

Kitaplarda arama yapmak için search metodunu yazacağız. Bu metot, bir sorgu metni alır ve başlığında o metni içeren kitapları döndürür. where ve contains kullanır.

Örnek: List<Book> search(String query) { return books.where((b) => b.title.contains(query)).toList(); }. Burada where her kitabı süzer; b.title.contains(query) başlıkta sorgu metni var mı kontrol eder.

Sonuç bir List<Book>'tur. toList() tembel Iterable'ı somut listeye çevirir. Bu metot, kullanıcının girdiği anahtar kelimeyle kitap bulmasını sağlar.

Arama sonuçu

search metodu bir List<Book> döndürür. Sonucun uzunluğu kaç kitap bulunduğunu verir. Örneğin üç kitaptan ikisi sorguyu içeriyorsa results.length 2 olur.

Örnek: var results = lib.search('ve');. Eğer 'Suç ve Ceza' ve 'Savaş ve Barış' ekliyse ikisi de 've' içerir; sonuç 2 kitap. print(results.length) 2 verir.

Bu metot, kütüphane uygulamasının kullanıcıya en yararlı özelliğidir. Binlerce kitap arasından saniyede sonuç verir.

Uygulama search metodunu ekle

Library sınıfına List<Book> search(String query) metodunu ekle. Metot books.where((b) => b.title.contains(query)).toList() döndürsün. main zaten üç kitap ekliyor ve lib.search('ve') çağırıyor; sonuçun length'ini yazdırıyor.

Başlangıç kodu

main.dart
class Book {
  String title;
  bool borrowed = false;
  Book(this.title);
}

class Library {
  List<Book> books = [];
  void addBook(Book b) {
    books.add(b);
  }
  void checkout(int index) {
    books[index].borrowed = true;
  }
  void returnBook(int index) {
    books[index].borrowed = false;
  }
  // search metodunu ekle
}

void main() {
  var lib = Library();
  lib.addBook(Book('Sefiller'));
  lib.addBook(Book('Suç ve Ceza'));
  lib.addBook(Book('Savaş ve Barış'));
  var results = lib.search('ve');
  print(results.length);
}

Örnek çözüm

main.dart
class Book {
  String title;
  bool borrowed = false;
  Book(this.title);
}

class Library {
  List<Book> books = [];
  void addBook(Book b) {
    books.add(b);
  }
  void checkout(int index) {
    books[index].borrowed = true;
  }
  void returnBook(int index) {
    books[index].borrowed = false;
  }
  List<Book> search(String query) {
    return books.where((b) => b.title.contains(query)).toList();
  }
}

void main() {
  var lib = Library();
  lib.addBook(Book('Sefiller'));
  lib.addBook(Book('Suç ve Ceza'));
  lib.addBook(Book('Savaş ve Barış'));
  var results = lib.search('ve');
  print(results.length);
}

Beklenen çıktı

2

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 where çağrısı

Soru
List<Book> search(String query) {
  return books.____((b) => b.title.contains(query)).toList();
}
Cevap
List<Book> search(String query) {
  return books.where((b) => b.title.contains(query)).toList();
}

Açıklama: where koşula göre süzer.

2 b.title.contains(query) ne döndürür?

main.dart
var b = Book('Suç ve Ceza');
var r = b.title.contains('Ceza');
  • Bir liste
  • void
  • Hata fırlatır
  • bool (true veya false) Doğru cevap

Açıklama: contains bir bool döndürür: bulunursa true, yoksa false.

3 search parçalarını eşleştir

Kavram Anlamı
String query Sorgu parametresi
.where(...) Süzme
.contains(query) Başlıkta arama
.toList() Listeye çevirme

Orta seviye bölümündeki tüm dersler