295. var and magic

הכרנו בעבר את מילת הקסם השמורה var המאפשרת לנו לא לציין את הטיפוס של המשתנה שלנו, אלא לגלות אותו בצורה implicitly לפי הערך שאיתו אנחנו מאתחלים את המשתנה.

אמרתי שאני אישית לא אוהב כל כך הKeyword הזה.

לפעמים מקבלים Side Effect ע”י שימוש בKeyword הזה:

נניח שכל המשתנים שלנו מוגדרים ע”י var, והקוד שלנו הוא בסגנון הזה:

1
2
3
4
5
6
7
8
9
10
11
var listener = GetListener();
var stations = GetElements("Radio Stations");
foreach (var station in stations)
{
if (station.IsActive)
{
listener.Notify(station.Name);
}
}

מה שיכול לקרות עכשיו זה שאיכשהו שינו את ערכי ההחזר של הפונקציות GetListener וGetElements.

במידה והיינו מגדירים באופן explicitly את הטיפוסים של המשתנים, אז הקוד בהכרח לא היה מתקמפל יותר.

במידה והשתמשנו באופן implicitly בעזרת הKeyword ששמו var, אז לקוד יש עוד סיכוי להתקמפל, במידה ולא השתנה הAPI (כלומר עדיין GetElements מחזיר Enumerable של איברים עם Properties שלIsActive וName, וGetListener מחזיר ממשק שיש לו פונקציית Notify)

זה איזשהו Side Effect נחמד, שיכול לחסוך לנו מעט עבודה, אבל לא מספיק שווה כדי להשתמש באופן שוטף בKeyword ששמו var, מאחר וכאמור, זה פוגע בקריאות. (ראו גם טיפ מספר 86)

המשך יום קסום טוב!

שתף