On this page
מערך שיעור: טיפול בשגיאות — בסיסי
משך: 2 שעות אקדמיות (90 דקות).
מטרת השיעור: הסטודנטים יבינו למה תוכנית קורסת על שגיאת ריצה בלתי-מטופלת, ויתחילו להשתמש ב-try/catch/finally בביטחון.
בסוף השיעור הסטודנטים צריכים: לעטוף קוד מסוכן ב-try/catch עם טיפול משמעותי (לא ריק), להסביר מתי finally רץ, ולזהות למה catch ריק הוא באג בפני עצמו.
דגש קריטי: השתמשו בדוגמאות מהשיעורים הקודמים ביחידה (Parse על קלט שגוי, אינדקס לא קיים) — הסטודנטים כבר ראו את הקריסות האלה, עכשיו לומדים לטפל בהן.
מהלך השיעור
| חלק בשיעור | משך | הערות ודגשים |
|---|---|---|
| פתיחה וחיבור | 5 דקות | הזכירו קריסה קודמת מהיחידה (int.Parse על “abc”) |
| הבעיה: קריסה מפילה הכל | 10 דקות | הראו שוב את הקריסה — “הפעולה הזו הפילה את כל התוכנית” |
| הרעיון: try/catch | 20 דקות | עטיפת אותו קוד, טיפול בעדינות |
| finally | 15 דקות | הדגימו שהוא רץ גם בהצלחה וגם בכישלון |
| כמה 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 שמדפיס הודעה ברורה — ההבדל בין “באג שקט מסוכן” ל"כישלון גלוי ומטופל" ברור מיד.