סוג משתנה בכניסה לפונקציה והודעות שגאיה

אהלן,
תקנו אותי אם אני טועה, אבל לפי מה שאני רואה פונקציות מתריאות על שגיאה כדוגמת חיבור int עם str רק בעת ריצה בתוכנית, ולא בעת הגדרת הפונקציה לבדה?

למשל, נניח באופן היפוטתי שאני אני כותב תוכנית שמחברת קלט עם מספר קבוע.
חלק מהפעמים היא מקבלת קלט שמוגדר בתוכנית (משתנה כלשהו) וחלק מהפעמים היא מקבלת קלט מ input מהמשתמש. לפי מה ששמתי לב - אם אני לא אגדיר בתוך הפונקציה את הקלט מהמשתנה כ int, אז במהלך הריצה אני אקבל שגיאה כי Input זה str ואז אני בעצם מחבר שני סוגי משתנים. נכון?

אתה צודק :slight_smile:
התוכנה לא יכולה לדעת בעת ההגדרה שלה מה טיפוס המשתנה שהיא מקבלת (כלומר אם זה input זו תמיד תהיה מחרוזת - אבל ייתכן שבאיזשהו שלב אתה ממיר אותה לטיפוס אחר) ולכן יהיה מוזר אם היא תזרוק שגיאה כשתעשה שורה שיכולה להיות חוקית בהינתן משתנה מהטיפוס המתאים.

נכון מאוד.

למען האמת זה נושא מעניין. זה האופי ספציפית של פייתון, ולחלק משפות התכנות אחרות יש אופי טיפה אחר – בעת הגדרת משתנה בהן, אנחנו אומרים לשפה מאיזה טיפוס (type) הוא צריך להיות. בשפות האלו בדרך־כלל גם צריך להגיד לשפה מאיזה טיפוס כל פרמטר שהיא מקבלת, ואיזה טיפוס היא מתעתדת להחזיר.
מערכות טיפוסים (types) בשפות תכנות זה נושא מגה מורכב שיש בו המון מחקר והתעסקות (כמה זה משפר זמן ריצה? כמה זה עוזר למנוע שגיאות של מתכנת? כמה זה משפר אבטחה? כמה זה מקצר את זמן התכנות?).
יש כלים שמאפשרים לנו להגיד לפייתון מאיזה סוג כל אחד מהמשתנים שאנחנו מגדירים, ולקבל מידע על בעיות שעלולות להיווצר בקוד שכתבנו. זה נקרא Type Annotations וזה עניין יחסית חדש בפייתון שנכנס למודעות ב־3–4 שנים האחרונות.

לקריאה נוספת (מורכב ויתכן התייחסות למונחים מקצועיים): Static and dynamic typing.

2 לייקים