On this page
מערך שיעור: Value מול Reference, ו-out
משך: 2 שעות אקדמיות (90 דקות).
מטרת השיעור: הסטודנטים יבינו למה שינוי פרמטר בפונקציה משפיע לפעמים על המשתנה בחוץ ולפעמים לא, וישתמשו נכון ב-out.
בסוף השיעור הסטודנטים צריכים: לחזות נכון אם שינוי בתוך פונקציה ישפיע על המשתנה המקורי, להסביר את ההבדל בין שינוי-תוכן-אובייקט להחלפת-הפניה, ולהשתמש ב-out בפונקציה מסוג Try.
דגש קריטי: זה אחד הנושאים הכי מבלבלים למתחילים ב-C# — הקדישו זמן להדגמה חיה, לא רק תיאור מילולי.
מהלך השיעור
| חלק בשיעור | משך | הערות ודגשים |
|---|---|---|
| פתיחה וחיבור | 5 דקות | שאלו: “אם אני שולח משתנה לפונקציה ומשנה אותו שם — זה משפיע בחוץ?” — אספו ניחושים |
| הבעיה + הרעיון: Value Type | 20 דקות | הדגימו TryDouble על int — “לא השתנה!” מפתיע חלק מהסטודנטים |
| הבעיה + הרעיון: Reference Type | 20 דקות | הדגימו AddItem על List — “כן השתנה!” ניגוד ישיר |
| שינוי-תוכן מול החלפת-הפניה | 15 דקות | הראו list.Add מול list = new List<>() בתוך פונקציה — קריטי להבהיר |
| out | 20 דקות | TryDivide, קשרו ל-TryParse שכבר מוכר משיעור ה-IO |
| תרגול מודרך | 10 דקות | תרגיל 1+2 |
דגשים להעברת השיעור
- זה נושא שמצריך הדגמה חיה, לא רק שקופית — הריצו את שני הקטעים (Value ו-Reference) בפועל מול הכיתה ותנו לתוצאה “לדבר בעד עצמה”.
- ההבחנה בין “לשנות אובייקט קיים” ל"להחליף הפניה" היא הנקודה שהכי הרבה סטודנטים מפספסים — הקדישו לה זמן נפרד ודוגמה משלה, אל תדחסו אותה כהערת אגב.
- אם יש זמן, קשרו במפורש בחזרה לשיעור ה-IO —
out int ageב-TryParseהוא בדיוק הדפוס שנלמד עכשיו לעומק.
מושגים
Value Type — טיפוס שמועבר כעותק (int, double, bool, struct).
Reference Type — טיפוס שמועבר כהפניה לאותו אובייקט (string, מחלקות, List<T>).
out — פרמטר “יציאה”; הפונקציה חייבת לתת לו ערך, נראה בחוץ.
תרגיל חשיבה
שאלת פתיחה: “אם תשלחו List<int> לפונקציה ובתוכה תוסיפו איבר — זה ישפיע על הרשימה המקורית? ואם תשלחו int ותנסו להכפיל אותו?”
מהלך: תנו לסטודנטים לנחש ולנמק לפני ההדגמה — הניגוד בין הציפייה לתוצאה בפועל הוא מה שמבסס את ההבנה. אל תתקנו מיד — תנו להדגמה החיה לענות.
מה המרצה מראה בסוף: הריצו את שני קטעי הקוד (Value ו-Reference) בזה אחר זה, עם Console.WriteLine לפני ואחרי הקריאה בכל אחד. הניגוד הישיר — “5 נשאר 5” מול “2 הפך ל-3” — הוא ההוכחה הכי משכנעת שיש.