24. @variable names

כולנו יודעים שאי אפשר לכתוב קוד כזה:

1
int int = 3;

כלומר להגדיר משתנה בשם של Keyword.

האמת שזה לא מדויק, כי בC# 2.0/3.0 הוסיפו Keywordים חדשים (למשל yield, select, from, var ועוד), ולמען תאימות לאחור, חלק מהkeywordים, ביניהם החדשים גורמים לשגיאה רק אם משתמשים בהם בcontext הנכון.

למשל אין בעיה להגדיר משתנה בשם select כל עוד זה לא בscope של שאילתת LINQ:

1
2
3
4
5
string select = "SELECT * FROM TABLE"; // Compiles
from select in Collection
select select;
// Doesn't compile

משום מה לפעמים נתקלים במקרים בהם כן רוצים לתת למשתנה שם שמור, למשל בדוגמה הראשונה (למרות שתמיד עדיף לתת שם אחר 😃).

לפעמים גם רוצים לתת שם שהוא CLSCompliant, כלומר יעבוד גם בשפות netיות אחרות.

יש תמיכה בזה ברמת השפה:

נוכל לכתוב את הקוד הבא:

1
int @int = 3;

תוכלו לומר "יופי, הוספת תחילית @. יכולת להוסיף גם תחילית _".

אז זהו שיש לזה משמעות מעבר: אפשר לרשום למשל את הקוד הזה:

1
2
3
int @number = 3;
Console.WriteLine(number);
// Compiles

ואת הקוד הבא:

1
2
3
int number = 3;
Console.WriteLine(@number);
// Compiles

שימו לב שבשתי הפעמים בשורה אחת יש @ ובשנייה אין.

הקומפיילר מזהה את שני המשתנים כאותו משתנה.

הוכחה נוספת לכך היא שהקוד הבא לא מתקמפל:

1
2
3
int @number = 3;
int number = 3;
// Doesn't compile

גם בשגיאות ובwarning שאנחנו מקבלים הקומפיילר מסיר את ה@

1
int @int = 3;

The variable ‘int’ is assigned but its value is never used

באופן כללי אני ממליץ שלא לתת למשתנים שמות של מילים שמורות, אבל יש אנשים שאוהבים לעשות את זה. למשל, לקרוא לערך החזר של פונקציה @return. 😕

או לחלופין לתת לשם של משתנה/פרמטר את השם @event.

שתף