# מערך שיעור: טיפול בשגיאות — בסיסי📋 מערך מרצה

משך: 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` שמדפיס הודעה ברורה — ההבדל בין "באג שקט מסוכן" ל"כישלון גלוי ומטופל" ברור מיד.
