סימון כנקרא
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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.
אתגר
קלהרחיבו את לולאת התפריט עם ענף "4":
- השתמשו ב־
printכדי להציג את ההנחיהTitle:וקראו את הקלט - השתמשו ב־
findכדי לאתר את הספר שכותרתו זהה בדיוק - אם אין התאמה, הדפיסו
Not found. - אחרת, הגדירו
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
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מחרוזות לעומק
סקירה של מתודות למחרוזותאינטרפולציה של מחרוזותמעבר על מחרוזותפיצול וחיבורסיכום – שוזר המחרוזות4בלוקים, Procs ו־Lambdas
מהו בלוק?do..end לעומת סוגריים מסולסליםמילת המפתח yieldפרמטרים של בלוקProcs ו־Lambdasסיכום – איטרטור מותאם אישית7Hashes חלק 2
Hash.new עם ערכי ברירת מחדלמעבר על HashesHashes מקונניםמיזוג ושינויסיכום - מונה תדירויות10פרויקט - רשומות תלמידים
סקירת הפרויקטהוספת תלמיד5עוצמת Enumerable
Select ו־Rejectשרשור MapReduce / Injectcount, all?, any?, none?group_by ו־partitionsort_by, min_by, max_byסיכום - צינור נתוניםתרגלו בעצמכם: קומפיילר Ruby אונליין