# מערך שיעור: מערכים מול ⁦List<T>⁩📋 מערך מרצה

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

מטרת השיעור: הסטודנטים ידעו לבחור בין מערך ל-`List<T>` לפי הצורך, ולהשתמש נכון בשניהם.

בסוף השיעור הסטודנטים צריכים: ליצור ולגשת לאיברים במערך ובעזרת אינדקס, להוסיף/להסיר איברים מ-`List<T>`, ולהסביר מתי כל אחד מתאים.

דגש קריטי: הדגימו `IndexOutOfRangeException` בשידור חי — זו השגיאה הכי שכיחה אצל מתחילים בנושא הזה.

---

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

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 5 דקות | שאלו: "איך הייתם שומרים 50 שמות בלי 50 משתנים?" |
| הבעיה + הרעיון: Array | 15 דקות | יצירה, גישה לפי אינדקס, `Length` |
| הבעיה: גודל קבוע | 10 דקות | נסו "להוסיף" איבר למערך מלא — קיר בטון |
| הרעיון: List&lt;T&gt; | 20 דקות | `Add`/`Remove`/`Count` — הפתרון לגמישות |
| Index מ-0 + IndexOutOfRangeException | 15 דקות | הדגימו גישה לאינדקס לא קיים בשידור חי |
| foreach על שניהם | 10 דקות | הראו תחביר זהה — נקודת חיבור חשובה |
| תרגול מודרך | 15 דקות | תרגיל 1+2 |

---

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

- אל תציגו `List<T>` לפני שהראיתם בבירור את המגבלה של מערך (גודל קבוע) — אחרת `List<T>` נשמע כמו "עוד תחביר" ולא כמו פתרון אמיתי.
- `List<T>` הוא הפעם הראשונה שסטודנטים נתקלים בתחביר Generic (`<T>`) — לא צריך להסביר Generics לעומק כאן, מספיק "T זה placeholder לסוג האיבר שבפנים" — הנושא יחזור בהרחבה בשיעור Generics.
- שווה להזכיר בקצרה ש-`List<T>` בנוי **מעל** מערך פנימית (גדל ע"י יצירת מערך חדש גדול יותר מאחורי הקלעים) — לא להיכנס לזה לעומק, רק לתת אינטואיציה שזה לא "קסם".

---

## מושגים

**Array** — אוסף בגודל קבוע מרגע היצירה.
**`List<T>`** — אוסף דינמי, תומך ב-`Add`/`Remove`.
**Index** — מיקום איבר באוסף, מתחיל מ-0.
**`IndexOutOfRangeException`** — שגיאת ריצה על גישה לאינדקס לא קיים.

---

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

**שאלת פתיחה:** "אתם בונים אפליקציית רשימת קניות. המשתמש יכול להוסיף ולמחוק פריטים כל הזמן. מערך או List&lt;T&gt;? למה?"

**מהלך:** תנו רגע לחשוב. התשובה הנכונה (`List<T>`) אמורה להיות די ברורה מהר — האתגר האמיתי הוא לנסח **למה**: כי מספר הפריטים לא ידוע מראש ומשתנה כל הזמן. שאלו דוגמה נגדית: "מתי דווקא מערך היה מתאים כאן?" (למשל: "7 תאים קבועים לימות השבוע בתצוגת לוח שנה").

**מה המרצה מראה בסוף:** נסו להוסיף איבר שישי למערך בגודל 5 (`array[5] = x`) — קריסה. מיד אחר כך, אותה פעולה בדיוק על `List<T>` עם `Add` — עובד חלק. הניגוד הישיר הזה מבסס את ההבדל טוב יותר מכל הסבר מילולי.
