# מערך שיעור: משתנים וטיפוסים📋 מערך מרצה

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

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

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

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

---

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

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 5 דקות | שאלו: "מי נתקל בבאג שסוג משתנה השתנה בלי שהתכוונו?" (רלוונטי במיוחד למי שבא מ-JS) |
| הבעיה: טעות טיפוס בזמן ריצה | 10 דקות | הראו קוד JS/Python שמשנה טיפוס משתנה ומתרסק בזמן ריצה מאוחר |
| הרעיון: Static Typing | 15 דקות | 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 דומה שממשיך "לרוץ" עד שהוא מתרסק במקום אחר לגמרי, הרבה אחרי מקור הבעיה האמיתי.
