# מערך שיעור: Enums📋 מערך מרצה

משך: 1.5 שעות אקדמיות (68 דקות).

מטרת השיעור: הסטודנטים יבינו למה `enum` עדיף על מספרי-קסם ומחרוזות חופשיות, וישתמשו בו בביטחון.

בסוף השיעור הסטודנטים צריכים: להגדיר `enum` משלהם, להשתמש בו בהשוואות וב-`switch`, ולהסביר במילים שלהם למה הוא בטוח יותר ממחרוזת חופשית.

דגש קריטי: התחילו מדוגמת Magic Number אמיתית (`status == 1`) לפני שמזכירים את המילה `enum` — זו הבעיה שהוא פותר.

---

## מהלך השיעור

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 5 דקות | הראו קוד עם `if (status == 1)` — שאלו "מה זה 1?" |
| הבעיה: Magic Number / מחרוזת שברירית | 15 דקות | הראו גם גרסת מחרוזת עם typo ("pendingg") שלא נתפס |
| הרעיון: enum | 15 דקות | הגדרה, שימוש בהשוואה |
| קוד: switch על enum | 15 דקות | הראו את הקריאות מול שרשרת if/else מקבילה |
| תרגול מודרך | 15 דקות | תרגיל 1+2 |
| שאלות + סיכום | 3 דקות | חיזרו על "קבוצה סגורה, נבדקת בקומפילציה" |

---

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

- אל תעמיקו יותר מדי בערך המספרי הפנימי של `enum` — זה פרט מעניין, לא הליבה. הליבה היא: קבוצה סגורה + בדיקת קומפילציה.
- אם יש זמן, שווה להראות שניסיון להשתמש בערך שלא קיים ב-`enum` (למשל `OrderStatus.Refunded` שלא הוגדר) פשוט לא מתקמפל — משלים את התמונה מול המחרוזת השברירית.

---

## מושגים

**`enum`** — טיפוס שמגדיר קבוצה סגורה וקבועה של ערכים.
**Underlying Value** — הייצוג המספרי הפנימי של כל ערך ב-enum.
**Magic Number** — מספר בקוד בלי הקשר ברור, קשה לפענוח.

---

## תרגיל חשיבה

**שאלת פתיחה:** "יש לכם `string status = \"Pending\"`. חבר לצוות כתב בטעות `\"pendingg\"` באחד המקומות. מתי תגלו את זה — ומה זה עולה לכם?"

**מהלך:** הובילו לתובנה: עם מחרוזת חופשית, זה מתגלה רק בזמן ריצה (אם בכלל — יכול פשוט "לא לעבוד" בשקט). עם `enum`, אותה טעות היא שגיאת קומפילציה — נתפסת לפני שהקוד בכלל רץ.

**מה המרצה מראה בסוף:** כתבו קוד עם `string status` ו-typo מכוון באחת ההשוואות — הריצו, והראו שהתוכנית "פשוט לא עושה מה שציפינו" בלי שום שגיאה. אחר כך אותו תרחיש עם `enum` ואיות שגוי של הערך — שגיאת קומפילציה מיידית וברורה.
