סעיפי rescue מרובים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Ruby של Coddy. שיעור 45 מתוך 56.
בלוק begin אחד יכול לכלול כמה סעיפי rescue. Ruby בודקת אותם מלמעלה למטה ומפעילה את הראשון שמחלקת החריגה שלו תואמת.
begin
number = Integer(gets.chomp)
result = 100 / number
puts result
rescue ArgumentError
puts "That's not a valid number."
rescue ZeroDivisionError
puts "Can't divide by zero."
endהסדר חשוב: יש לרשום מחלקות ספציפיות לפני כלליות. אם StandardError תופיע ראשונה, היא תתפוס את כל השגיאות והענפים הבאים לעולם לא יפעלו.
אפשר גם לתפוס כמה מחלקות של חריגות בענף אחד על ידי ציון שלהן כשהן מופרדות בפסיקים:
begin
risky_call
rescue ArgumentError, TypeError => e
puts "Bad input: #{e.message}"
endהשתמש בזה כאשר קוד השחזור זהה לכמה מצבי כשל.
אתגר
קלקראו שתי שורות מהקלט, שתיהן אמורות להיות מספרים שלמים. השתמשו ב־Integer(...) עבור שתיהן, ואז חלקו את הראשונה בשנייה.
טפלו בשלושה מקרים באמצעות ענפי rescue נפרדים:
ArgumentError→ הדפיסוBad number!ZeroDivisionError→ הדפיסוCannot divide by zero!TypeError→ הדפיסוWrong type!
אם הכול עובד, הדפיסו Result: <a / b> (חלוקת מספרים שלמים).
עבור הקלט 10 / 2, הפלט הוא Result: 5. עבור 10 / 0, Cannot divide by zero!. עבור 10 / abc, Bad number!.
נסו בעצמכם
raw_a = gets.chomp
raw_b = gets.chomp
# TODO: begin ... rescue ArgumentError ... rescue ZeroDivisionError ... rescue TypeError ... 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 אונליין