Menu
Coddy logo textTech

Okundu Olarak İşaretle

Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 32 / 56.

Son seçeneği ekleyin: 4. Mark As Read. Kullanıcı tam bir başlık yazar ve program o kitabın :read anahtarını false değerinden true değerine çevirir.

Kitabı bulmak için find kullanın: blokla eşleşen ilk öğeyi veya hiçbir şey eşleşmediğinde nil döndürür:

book = library.find { |b| b[:title] == query }

Eğer book nil ise, hiçbir kitap bulunamadığını bildirin. Aksi takdirde, onu yerinde değiştirin; Ruby hash'leri dizi içinde kimliklerini paylaşırlar, bu nedenle book[:read] değerini güncellemek library içinde saklanan girişi de günceller.

challenge icon

Görev

Kolay

Menü döngüsünü "4" dalı ile genişletin:

  1. Title: istemini print ile yazdırın ve okuyun
  2. Tam olarak bu başlığa sahip kitabı bulmak için find kullanın
  3. Eşleşme yoksa, Not found. yazdırın
  4. Aksi takdirde, book[:read] = true olarak ayarlayın ve Marked as read! yazdırın

Önceki tüm dalların çalışmaya devam etmesini sağlayın.

The Hobbit kitabını ekleyen, onu okundu olarak işaretleyen ve ardından çıkış yapan girdiler için, işaretleme bloğu şunu yazdırır:

Choose an option: Title: Marked as read!

Kopya kağıdı

Bir dizideki ilk eşleşen öğeyi bulmak için find kullanın (bulunamazsa nil döner):

book = library.find { |b| b[:title] == query }

Hash'ler diziler içinde kimlik paylaştığı için, bulunan nesneyi değiştirmek orijinal girişi günceller:

if book.nil?
  puts "Not found."
else
  book[:read] = true
  puts "Marked as read!"
end

Kendin dene

library = []

loop do
  puts "--- Library Manager ---"
  puts "1. Add Book"
  puts "2. Search By Title"
  puts "3. Filter By Genre"
  puts "4. Mark As Read"
  puts "5. Exit"
  print "Choose an option: "
  choice = gets.chomp
  if choice == "5"
    puts "Goodbye!"
    break
  elsif choice == "1"
    print "Title: "
    title = gets.chomp
    print "Author: "
    author = gets.chomp
    print "Genre: "
    genre = gets.chomp
    library.push({ title: title, author: author, genre: genre, read: false })
    puts "Book added!"
  elsif choice == "2"
    print "Search title: "
    query = gets.chomp
    matches = library.select { |b| b[:title].downcase.include?(query.downcase) }
    if matches.empty?
      puts "No matches."
    else
      matches.each { |b| puts "#{b[:title]} by #{b[:author]}" }
    end
  elsif choice == "3"
    print "Genre: "
    genre = gets.chomp
    matches = library.select { |b| b[:genre] == genre }
    matches.each { |b| puts "#{b[:title]} by #{b[:author]}" }
    puts "Total: #{matches.length}"
  end
  # YAPILACAK: choice == "4" durumunu işle, tam başlığa göre bul,
  # book[:read] = true olarak ayarla, "Marked as read!" veya "Not found." yazdır.
end
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 ve Akış bölümündeki tüm dersler