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

מטרת השיעור: הסטודנטים יפנימו שC# בודקת טיפוסים בזמן קומפילציה, ויידעו להבחין בין var (הסקה סטטית) לטיפוסיות דינמית.

בסוף השיעור הסטודנטים צריכים: להצהיר נכון על משתנים מהטיפוסים הפרימיטיביים הנפוצים, להסביר למה var לא הופך את C# לדינמית, ולזהות מראש קוד שלא יתקמפל בגלל אי-התאמת טיפוסים.

דגש קריטי: אם יש בכיתה סטודנטים עם רקע ב-JavaScript/Python — הניגוד המפורש ל-Dynamic Typing הוא הדרך הכי מהירה לביסוס האינטואיציה.


מהלך השיעור

חלק בשיעורמשךהערות ודגשים
פתיחה וחיבור5 דקותשאלו: “מי נתקל בבאג שסוג משתנה השתנה בלי שהתכוונו?” (רלוונטי במיוחד למי שבא מ-JS)
הבעיה: טעות טיפוס בזמן ריצה10 דקותהראו קוד JS/Python שמשנה טיפוס משתנה ומתרסק בזמן ריצה מאוחר
הרעיון: Static Typing15 דקותC# תופסת את אותה טעות בקומפילציה — הדגימו את השגיאה בפועל
קוד: טיפוסים פרימיטיביים15 דקותint/double/bool/char/string — הדגימו כל אחד
var והסקת טיפוס15 דקותהדגישו: var לא = דינמי; נסו לשנות טיפוס אחרי הסקה וקבלו שגיאה
תרגול מודרך20 דקותתרגיל 1+2 מדף השיעור
שאלות + סיכום10 דקותחיזרו על ההבדל Primitive/Object

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

  • אל תציגו את var לפני שביססתם היטב ש-C# היא Static — אחרת סטודנטים “לומדים” ש-var = דינמי, וזו טעות נפוצה שקשה לתקן אחר כך.
  • הדגמה חיה של שגיאת הקומפילציה (לא רק תיאור שלה) חשובה — סטודנטים צריכים לראות בעיניים את ההודעה האדומה.
  • Reference vs Primitive כדאי להזכיר בקצרה בלבד כאן — זה יחזור בהרחבה בשיעור “Value מול Reference” מאוחר יותר, אין צורך להעמיק עכשיו.

מושגים

Literal — ערך קבוע כתוב ישירות בקוד. Static Typing — בדיקת טיפוסים בזמן קומפילציה. Dynamic Typing — בדיקת טיפוסים בזמן ריצה (לא ב-C#). var — הסקת טיפוס אוטומטית בקומפילציה, לא טיפוסיות דינמית. Primitive Type — טיפוס שמחזיק ערך ישירות (int, bool, double, char). Reference/Object Type — טיפוס שמחזיק הפניה לאובייקט (string, מחלקות).


תרגיל חשיבה

שאלת פתיחה: “אם הייתם מתכננים שפת תכנות משלכם — הייתם בודקים טיפוסים בזמן כתיבת הקוד, או מחכים עד שהתוכנית רצה? מה היתרון והחיסרון של כל גישה?”

מהלך: תנו 3 דקות דיון בזוגות. אספו תשובות — צפו שחלק יגידו “בקומפילציה יותר בטוח” וחלק יגידו “בזמן ריצה יותר גמיש”. אשרו ששתי הגישות קיימות בעולם האמיתי (C#/Java לעומת Python/JS), וכל אחת משרתת סדר עדיפויות שונה: בטיחות מוקדמת מול גמישות/מהירות כתיבה.

מה המרצה מראה בסוף: הריצו קוד עם שגיאת טיפוס מכוונת, והראו את הודעת השגיאה המדויקת שהקומפיילר נותן (כולל מספר שורה) — לעומת קוד JS דומה שממשיך “לרוץ” עד שהוא מתרסק במקום אחר לגמרי, הרבה אחרי מקור הבעיה האמיתי.