Menu
Coddy logo textTech

סימון כנקרא

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Ruby של Coddy. שיעור 32 מתוך 56.

הוסף את האפשרות האחרונה, 4. Mark As Read. המשתמש מקליד כותרת מדויקת, והתוכנית משנה את הערך של המפתח :read של אותו ספר מ־false ל־true.

כדי למצוא את הספר, השתמשו ב־find: היא מחזירה את האיבר הראשון שתואם לבלוק, או nil כשאין התאמה:

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

אם book הוא nil, דווח שלא נמצא ספר. אחרת, שנה אותו במקום; גיבובי Ruby חולקים את הזהות שלהם בתוך המערך, ולכן עדכון book[:read] מעדכן גם את הרשומה המאוחסנת ב־library.

challenge icon

אתגר

קל

הרחיבו את לולאת התפריט עם ענף "4":

  1. השתמשו ב־print כדי להציג את ההנחיה Title: וקראו את הקלט
  2. השתמשו ב־find כדי לאתר את הספר שכותרתו זהה בדיוק
  3. אם אין התאמה, הדפיסו Not found.
  4. אחרת, הגדירו book[:read] = true והדפיסו Marked as read!

ודאו שכל הענפים הקודמים עדיין פועלים.

עבור קלטים שמוסיפים את The Hobbit, מסמנים אותו כנקרא ואז יוצאים, בלוק הסימון מדפיס:

Choose an option: Title: Marked as read!

נסו בעצמכם

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
  # TODO: לטפל במקרה שבו choice == "4", למצוא לפי כותרת מדויקת,
  # להגדיר book[:read] = true, להדפיס "Marked as read!" או "Not found."
end
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר Ruby אונליין