תחביר של חריגה (חלק שני)

בחלק הקודם דיברתי בצורה כללית על ההבדל בין שגיאה, כישלון וחריגה, בחלק הזה אנסה להתחיל בתחביר של חריגה, חשוב להבין כי אני לא מדבר על טיפול בשגיאות וכשלונות, אלא רק על המצב בו הגענו לחריגה.

בשפת רובי טיפול בחריגה מתבצע באמצעות 2 מילים שמורות, כאשר השאר הם בעצם כלים אשר ניתן לשנות אותם בזמן ריצה, כך שידע של תחביר בלבד לא יעזור להתמודד עם חריגות בשפת רובי.

בשפת רובי יש מספר דרכים להתמודד עם חריגות. במידה ונרצה להריץ פעולות מסויימות, ורק עליהן נרצה לטפל בחריגות ספציפיות לפעולות, אנחנו נשתמש בתחביר של

begin
   code_that_can_have_exception
rescue ExceptionClassThatCanBeRaised => e
   handling_the_exception
end

כמובן שמומלץ לא לנסות לרשת כל חריגה קיימת, כלומר לא לרשת חריגה כדוגמת Exception או אפילו Object, אלא לרשת רק מה שחייבים. עבור הקוד שלנו.

begin ברובי הוא מקביל ל try אשר קיים בשפות שונות כדוגמת פסקל, ++C וג'אווה.

rescue הוא המקביל ל except או catch בשפות שהזכרתי למעלה. כאשר ExceptionClassThatCanBeRaised היא מחלקה שמכילה את החריגה שלנו, ואנחנו מכניסים את ה instance שלה אל תוך e.

אבל במידה ואנחנו למשל יוצרים מתודה כלשהי ורוצים שהיא תדע לטפל בחריגה, אנחנו לא צריכים באמת את begin, היות ואנחנו יכולים לעשות rescue על כל המתודה ובכך להתמודד עם החריגה שם:

def my_method
  yield # allow others to execute block
rescue ArgumentError => e
  # do something
end

שוב פעם יש לזכור כי אין לטפל בכל חריגה קיימת, אלא רק במה שצריך. בקוד למעלה בעצם יצרנו מצב בו אנחנו יכולים לתת למתכנת להריץ בלוק של קוד.

מחשבה אחת על “תחביר של חריגה (חלק שני)

  1. פינגבק: זריקת חריגה (חלק שלישי) | לראות שונה

כתיבת תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s