מרחשוון

המרות טיפוסים

בבלוגו “הרפתקאות נפלאות בקוד”, אריק ליפרט נכנס לעומק בנושא המרות טיפוסים (type cast) בדוט-נט.

הדבר הראשון שליפרט חידש לי הוא שיש שתי דרכים להמיר משתנה לטיפוס אחר. אני מכירה את הדרך שבה שמים את הטיפוס שאליו רוצים להמיר בתוך סוגריים:

short s = (short)123;

אבל הוא מספר שאפשר גם להשתמש במילה As:

int? i = s as int?;

מדהים. דברים שלא ידעתי.
אבל עיקר המאמר שלו נכנס לשאלה: מהו בעצם ההבדל בין שני סוגי ההמרות. מתברר שההבדל הכי בולט הוא בור שעלולים ליפול אליו: מאחר שהתוצאה של המילה as עלולה להיות null, אז הטיפוס שאליו ממירים צריך להיות כזה שיכול לקבל null. לכן אי אפשר לכתוב as int, אין בזה שום הגיון. כי אם המשתנה אינו Int, אז מה הערך החוזר צריך להיות?
אבל בעצם, הוא מסכם במאמרו, ישנו הבדל סמנטי מבחינת מהו המסר שכל אחד מסוגי ההמרות מעביר למתכנת: המסר של cast (השימוש בסוגריים) הוא “אני בטוח שההמרה הזאת היא חוקית ואני מוכן לקבל שגיאת ריצה אם אני טועה”. אופרטור ה-as מעביר את המסר “אני לא יודעת אם ההמרה הזאת היא חוקית; אנחנו ננסה ונראה איך ילך”.

המאמר שלו הוא לא ארוך, והוא מאד קל לקריאה. לכו על זה!

כתבו תגובה

כתובת הדוא"ל שלכם לא תוצג.