On this page
מערך שיעור: מערכים מול List<T>
משך: 2 שעות אקדמיות (90 דקות).
מטרת השיעור: הסטודנטים ידעו לבחור בין מערך ל-List<T> לפי הצורך, ולהשתמש נכון בשניהם.
בסוף השיעור הסטודנטים צריכים: ליצור ולגשת לאיברים במערך ובעזרת אינדקס, להוסיף/להסיר איברים מ-List<T>, ולהסביר מתי כל אחד מתאים.
דגש קריטי: הדגימו IndexOutOfRangeException בשידור חי — זו השגיאה הכי שכיחה אצל מתחילים בנושא הזה.
מהלך השיעור
| חלק בשיעור | משך | הערות ודגשים |
|---|---|---|
| פתיחה וחיבור | 5 דקות | שאלו: “איך הייתם שומרים 50 שמות בלי 50 משתנים?” |
| הבעיה + הרעיון: Array | 15 דקות | יצירה, גישה לפי אינדקס, Length |
| הבעיה: גודל קבוע | 10 דקות | נסו “להוסיף” איבר למערך מלא — קיר בטון |
| הרעיון: List<T> | 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<T>? למה?”
מהלך: תנו רגע לחשוב. התשובה הנכונה (List<T>) אמורה להיות די ברורה מהר — האתגר האמיתי הוא לנסח למה: כי מספר הפריטים לא ידוע מראש ומשתנה כל הזמן. שאלו דוגמה נגדית: “מתי דווקא מערך היה מתאים כאן?” (למשל: “7 תאים קבועים לימות השבוע בתצוגת לוח שנה”).
מה המרצה מראה בסוף: נסו להוסיף איבר שישי למערך בגודל 5 (array[5] = x) — קריסה. מיד אחר כך, אותה פעולה בדיוק על List<T> עם Add — עובד חלק. הניגוד הישיר הזה מבסס את ההבדל טוב יותר מכל הסבר מילולי.