משך: 2 שעות אקדמיות (90 דקות).

מטרת השיעור: הסטודנטים יבינו למה תוכנית קורסת על שגיאת ריצה בלתי-מטופלת, ויתחילו להשתמש ב-try/catch/finally בביטחון.

בסוף השיעור הסטודנטים צריכים: לעטוף קוד מסוכן ב-try/catch עם טיפול משמעותי (לא ריק), להסביר מתי finally רץ, ולזהות למה catch ריק הוא באג בפני עצמו.

דגש קריטי: השתמשו בדוגמאות מהשיעורים הקודמים ביחידה (Parse על קלט שגוי, אינדקס לא קיים) — הסטודנטים כבר ראו את הקריסות האלה, עכשיו לומדים לטפל בהן.


מהלך השיעור

חלק בשיעורמשךהערות ודגשים
פתיחה וחיבור5 דקותהזכירו קריסה קודמת מהיחידה (int.Parse על “abc”)
הבעיה: קריסה מפילה הכל10 דקותהראו שוב את הקריסה — “הפעולה הזו הפילה את כל התוכנית”
הרעיון: try/catch20 דקותעטיפת אותו קוד, טיפול בעדינות
finally15 דקותהדגימו שהוא רץ גם בהצלחה וגם בכישלון
כמה catch לסוגים שונים15 דקותFormatException מול IndexOutOfRangeException
האזהרה: catch ריק10 דקותהראו כמה מסוכן “לבלוע” שגיאה בשקט
תרגול מודרך15 דקותתרגיל 1+2

דגשים להעברת השיעור

  • זה שיעור-סיכום ליחידה כולה — נצלו אותו כדי לקשור אחורה לכל השגיאות שכבר נתקלו בהן (Parse, אינדקס, Nullable) ולהראות שעכשיו יש להם כלי אחיד לטפל בכולן.
  • הדגישו בתקיפות ש-catch ריק הוא לא “פתרון עצלן” אלא ממש באג — שגיאה אמיתית נעלמת בלי עקבות. שווה דוגמה קונקרטית של הנזק (למשל: כסף “נעלם” בלי שאף אחד ידע שהעברה נכשלה).
  • אין צורך להיכנס עכשיו להיררכיית Exceptions מלאה או Custom Exceptions — זה מגיע בהרחבה ביחידה הבאה (Exceptions, IO, JSON, LINQ). כאן המטרה רק ליסודות: try/catch/finally עובדים.

מושגים

Exception — אובייקט שמייצג שגיאת ריצה, “נזרק” כשמשהו משתבש. try — בלוק שמריץ קוד שעלול לזרוק חריגה. catch — בלוק שתופס ומטפל בחריגה שנזרקה. finally — בלוק שרץ תמיד, בהצלחה ובכישלון כאחד.


תרגיל חשיבה

שאלת פתיחה: “תוכנית עסקית מבצעת העברת כסף בין שני חשבונות. באמצע התהליך, שורת קוד זורקת חריגה. אם לא נטפל בה בכלל — מה עלול לקרות? ואם נתפוס אותה אבל לא נעשה איתה כלום (catch ריק) — האם זה בסדר?”

מהלך: הובילו את הסטודנטים לזהות שתי בעיות שונות: קריסה מוחלטת (בלי טיפול בכלל) עלולה להשאיר את הפעולה “באמצע” בצורה לא עקבית; אבל catch ריק גם מסוכן — הכסף אולי “נעלם” בלי שאף לוג או הודעה מציינים שמשהו נכשל. המסקנה: תמיד לתפוס באופן ממוקד, ותמיד לעשות משהו משמעותי בתוך ה-catch.

מה המרצה מראה בסוף: הריצו קוד עם catch ריק על תרחיש קריסה — התוכנית “ממשיכה” בלי שום סימן שמשהו נכשל, אבל התוצאה בפועל שגויה/חסרה. אחר כך אותו תרחיש עם catch שמדפיס הודעה ברורה — ההבדל בין “באג שקט מסוכן” ל"כישלון גלוי ומטופל" ברור מיד.