שיפורים בגרסאות האחרונות של C# – פוסט #1
-
שיפורים בגרסאות האחרונות של C# – פוסט #1
בגרסאות האחרונות, בפרט בגרסה 7, מייקרוסופט שיפרה מאוד את הSyntex של השפה, הפשיטה אותו, והורידה תווים מיותרים. ממליצה מאוד להתחיל להשתמש בקיצורים המעולים הללו, שהופכים את הקוד לפשוט וקריא יותר, אני אישית בקשתי מהצוות שלי, שעל כל Request Review שהן שולחות, תוספנה איזה תיקון רטרואקטיבי לקוד קיים, שישדרג אותו. להלן כמה מהשיפורים המשמעותיים: Arrow Operator => או בשמו המייקרוסופטי: Lambda Operator מדובר ב”השאלה” מוצלחת מJS, וניתן להשתמש בו בכל פונקציה או Property המכילים פקודה אחת בלבד דוגמאות: //Old
public int Sum
{
get
{
return X + Y;
}
}//New
public int Sum => X + Y; גם הפונקציות לא הוזנחו, ואפשר להשתמש באופן הזה, במקום: //Old
public int Sum(int x, int y)
{
return x + y;
}//New
public int Sum(int x, int y) => x + y; ואפילו כך (עובדת חרוצה אחת ספרה את הפער בתווים, וטענה בצדק שאין כאן הבדל לטובת ה=> אם כי זה בהחלט יותר ברור): //Old
public int Sum { set { X = value; } }//New
public int Sum { set => X = value; }
באתר מיקרוסופט: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/lambda-operator Out variables עד היום, בשביל להעביר out parameter לפונקציה, היה צורך צורך להגדיר מראש public void PrintCoordinates(Point p)
{
int x, y; // have to “predeclare”
p.GetCoordinates(out x, out y);
WriteLine($”({x}, {y})”);
} מהיום, ההגדרה יכולה להתבצע בשורת השליחה באופן הבא: public void PrintCoordinates(Point p)
{
p.GetCoordinates(out int x, out int y);
WriteLine($”({x}, {y})”);
}
Tuples אין ספק שכל מפתח נתקל בדילמה הזו: צריך להחזיר מפונקציה 3 ערכים, “אמממ, לבנות struct/ class בשביל פונקציה אחת? קצת בזבוז…” “להשתמש בout? מעיק…” אז באה מיקרוסופט ופתרה את הבעיה בדמות Tuple, בוורסיה הקודמת שלו, הוא באמת לא משהוא, אבל לפחות חוסך. הם יצרו 8 מחלקות ג’נריות שמכילות עד 8 Properties לפי הצורך והType יקבע לפי מה שהמשתמש יעביר, דוג’: var tuple = new Tuple(1, “cat”, true);
// Part B: access tuple properties.
if (tuple.Item1 == 1)
{
Console.WriteLine(tuple.Item1);
} האמת, שתמיד חיכיתי שC# תשדרג את הTuple ויגיע קוד שלא חשבנו עליו, אז הנה זה הגיע: הגדרה פשוטה ממש: var named = (first: “one”, second: “two”);
if(named.first == “one”) יש לזה כמובן עוד שימושים והרחבות, ששווה ממש לקרוא עליהם כאן: https://docs.microsoft.com/en-us/dotnet/csharp/tuples עד כאן בינתיים, נתראה במאמר המשך לנושא, רק בריאות ושמחות בעזרת ה’ שושנה
Log in to reply.