ensure ו־raise
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Ruby של Coddy. שיעור 46 מתוך 56.
שני חלקים נוספים משלימים את ערכת הכלים לטיפול בשגיאות.
ensure הוא בלוק שרץ בכל מקרה, בין אם begin הסתיים כרגיל, ובין אם ענף rescue תפס חריגה, ואפילו אם החריגה לא נתפסה. כאן שמים קוד ניקוי:
begin
puts "opening file"
raise "something broke"
rescue
puts "caught it"
ensure
puts "closing file"
end
# פותח קובץ
# תפסתי את השגיאה
# סוגר קובץraise היא הדרך ליצור חריגה משלך. מעבירים מחרוזת עבור ההודעה, או מחלקה יחד עם הודעה:
def withdraw(amount)
raise ArgumentError, "amount must be positive" if amount <= 0
# ... בצע את המשיכה
endהנוהג הוא להפעיל raise מוקדם, בראש המתודה, כדי להיכשל במהירות כשהארגומנטים שגויים. הקורא יכול להשתמש ב־rescue אם יש לו דרך הגיונית להתאושש, או לתת לשגיאה להמשיך לעלות.
אתגר
קלהגדירו מתודה safe_divide(a, b) ש:
- מעלה
ArgumentErrorעם ההודעה"b cannot be zero"אםb == 0 - אחרת מחזירה
a / b
לאחר מכן קראו שני מספרים שלמים מהקלט. קראו ל־safe_divide בתוך begin / rescue / ensure:
- במקרה של הצלחה, הדפיסו
Result: <value> - במקרה של
ArgumentError, הדפיסוError: <message> - ב־
ensure, הדפיסו תמידDone.
עבור הקלט 10 / 2, הפלט הוא:
Result: 5
Done.עבור הקלט 10 / 0:
Error: b cannot be zero
Done.נסו בעצמכם
# TODO: הגדירו את safe_divide(a, b), שמעלה ArgumentError כאשר b == 0
a = gets.to_i
b = gets.to_i
# TODO: begin ... הדפיסו Result; rescue ArgumentError => e ... הדפיסו Error; ensure ... הדפיסו Done.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
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 אונליין