if / unless בשורה אחת
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Ruby של Coddy. שיעור 41 מתוך 56.
Ruby מאפשרת לך למקם את if ואת unless בסוף של פקודה יחידה, בתור משנה של שורה אחת. זה נקרא כמעט כמו אנגלית.
puts "Adult" if age >= 18
puts "Save your work" unless savedזה זהה ל:
if age >= 18
puts "Adult"
end
unless saved
puts "Save your work"
endהצורה התמציתית מתאימה במיוחד לבדיקות הגנה בראש מתודה, או לעדכונים מותנים חד־פעמיים בתוך לולאה:
return if name.nil? || name.empty?
counts = Hash.new(0)
words.each do |w|
counts[w] += 1 unless w.start_with?("#")
endכמו באופרטור התנאי, השתמשו במתנים בשורה אחת עבור פקודות קצרות. אם גוף הפקודה יהיה ארוך יותר משורה אחת, כתבו במקום זאת בלוק if רגיל.
אתגר
קלקרא רשימה של מספרים שלמים המופרדים בפסיקים. עבור כל מספר, הדפס שורה אחת, אך רק כשהמספר אינו אפס:
- הדפס
positive: <n>אםn > 0 - הדפס
negative: <n>אלא אם כןn >= 0
בשתי השורות יש להשתמש בצורת משנה המופיעה בשורה (inline modifier) (ללא בלוק if, ללא else). לאחר הלולאה, הדפס Skipped zeros: <count>, כאשר count הוא מספר האפסים, שגם הוא מחושב ללא בלוק if (השתמש ב-count).
עבור הקלט 3,-2,0,5,0, הפלט הוא:
positive: 3
negative: -2
positive: 5
Skipped zeros: 2נסו בעצמכם
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: הדפס עבור כל מספר באמצעות `if` / `unless` בשורה אחת
# TODO: הדפס Skipped zeros: <n> באמצעות count
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
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סיכום - צינור נתונים8קבלת החלטות מתקדמת
case עם מחלקות ו־Regexwhen עם ערכים מרוביםהאופרטור הטרנריif / unless בשורה אחתסיכום – מסווג ציוניםתרגלו בעצמכם: קומפיילר Ruby אונליין