סיכום – מחשבון בטוח
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Ruby של Coddy. שיעור 47 מתוך 56.
בנו מחשבון קטן שמתמודד עם קלט שגוי, תוך שילוב של raise, כמה סעיפי rescue ו-ensure.
אתגר
בינוניהגדירו מתודה calc(a, op, b) ש:
- מעלה
ArgumentErrorעם ההודעה"unknown operator"אםopאינו אחד מאלה:+,-,*,/ - אחרת, מבצעת את הפעולה (השתמשו בחשבון של מספרים שלמים עבור
/)
לאחר מכן קראו שלוש שורות מהקלט, a, op, b: וקראו ל־calc בתוך begin / rescue / ensure:
- במקרה של הצלחה, הדפיסו
<a> <op> <b> = <result> - במקרה של
ArgumentError, הדפיסוBad operator - במקרה של
ZeroDivisionError, הדפיסוCannot divide by zero - ב־
ensure, הדפיסו תמיד--- end ---
השתמשו ב־Integer(...) כדי לנתח את a ואת b, בתוך אותו בלוק begin, כך שגם קלט שאינו מספר שלם יגיע אל Bad operator (ArgumentError מכסה את שני המקרים).
עבור הקלט 6 / * / 7, הפלט הוא:
6 * 7 = 42
--- end ---עבור הקלט 10 / / / 0:
Cannot divide by zero
--- end ---נסו בעצמכם
# TODO: להגדיר את calc(a, op, b), שתזרוק ArgumentError אם op אינו מוכר
raw_a = gets.chomp
op = gets.chomp
raw_b = gets.chomp
# TODO: להשתמש ב-begin/rescue/ensure כמתואר
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
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 אונליין