מה חדש ב - C# 7?

גרסתה הראשונה של שפת C# יצאה ב2002 עם גרסה 1.0 של NET.
מאז כל שנתיים-שלוש, מתעדכנת גרסת NET. ואיתה גם שפת C#

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

לפני כשנתיים הפכה תשתית NET. ל Open Source, דבר שאני מקווה שאומר שבשנים הקרובות השינויים ילכו ויעשו מגניבים יותר.

היום אסקור בקצרה את השינויים העיקריים בגרסה C# 7.
אני ממליץ בחום כבר עם קריאת המדריך, להוריד את הגרסה החדשה ולהתחיל לנסות את הדברים שאכתוב כאן.

איך משיגים את הגרסה החדשה של #C?

על מנת לעבוד עם C# 7 , יש להתעדכן לגרסה 4.6.2 של NET. - את זאת ניתן לעשות על ידי עדכון ל Visual Studio 2017

פיצ'ר ראשון - Inline Out Declaration:

עד היום:



השינוי:



אין צורך להגדיר את המשתנה לפני השימוש ב out, ניתן לעשות זאת באותה שורה.

ניתן לראות שהשינוי לא גדול, אך הופך את הקוד לאלגנטי יותר.


פיצ'ר שני - Pattern Matching:

נגיד שכתבנו פונקציה אשר מבצעת פעולה מסוימת על גיל (int) שקיבלה כפרמטר.
הגיל שהפונקציה מקבלת יכול להתקבל כקלט מהמשתמש (string) או מתשאול של int) - Database)



הסבר השורה -
if (age is int intAge || (age is string stringAge && int.TryParse(stringAge, out intAge)))

בחלק הראשון של התנאי אנו בודקים האם המשתנה age הוא מסוג int, אך הביטוי לא נגמר שם, באותו ביטוי אנו גם מאתחלים משתנה חדש בשם intAge ושמים בו את הערך של age! (אם age אינו מספר יוכנס ל intAge הערך 0)

בהמשך הביטוי, מתקיימת בדיקה האם age הוא מסוג string ומתבצע אתחול של stringAge, ואז מתקיים נסיון להמיר את stringAge למשתנה מסוג int, והשמת הערך במשתנה intAge (שהוגדר בתחילת הביטוי).

במילים אחרות משמעות הפיצ'ר היא יכולת הגדרת המשתנה באותו הביטוי בו אנו בודקים האם הוא מקיים תנאי מסוים.


פיצ'ר שלישי - Smart Switch-Case Statements:

פיצ'ר מצוין ושימושי מאוד בעיני.

עד היום ב switch case statements לא ניתן היה להכניס לוגיקה ל-case.
הפער גרם לכך שהשימוש ב switch case לא היה נרחב מאוד. מפתחים המשיכו להשתמש ב if - else.

ב - C# 7, חברת Microsoft הפכה את swich לעוצמתית מאוד בזכות השינוי הבא:



אז מה בעצם ראינו כאן?

  1. ניתן ליצור עצם בעבור case ספציפי
  2. ניתן לבצע תשאול על מאפייני העצם ולהתנות את הכניסה ל-case במאפייניו
לא עוד if - else ארוכים ומלוכלכים!


פיצ'ר רביעי - Throw Expressions:

גם הפיצ'ר הזה מגיע על מנת להפוך את הקוד שלנו ליותר אלגנטי ונוח לקריאה.

עד היום:



השינוי:



הביטוי "??" בודק האם הערך שהוכנס הוא null ואם כן מאפשר לזרוק Exception באותה השורה!


פיצ'ר חמישי - Value Tuples:

בגרסה החדשה התווספה יכולת לעבוד עם Tuple מבלי להשתמש במחלקה המיועדת לכך.

זה יראה כך:
(string name, int age) = ("Tomer", 22);
כעת ניתן לגשת לערכים name ו- age.

קיימת גם אופציה ליצור פעולות המחזירות Value Tuples:


ואז להשתמש בהן כך:
(string name, int age) = GetNameAndAge();

וכמובן קיימת אפשרות לבצע עם ValueTuples את כל הפעולות שניתן לעשות עם שאר הטיפוסים - כמו ליצור רשימה שלהם וכו'..

הערה: על מנת להשתמש ב ValueTuples יש להתקין NuGet בשם System.ValueTuple

פיצ'ר שישי - Local Functions:

כעת ניתן ליצור פעולות בתוך פעולות!

מתי נרצה לעשות זאת?
כאשר אנחנו יודעים שלא נשתמש בלוגיקה מסוימת מחוץ לפונקציה שלנו,
וגם סתם כאשר אנחנו רוצים להפוך את הקוד שלנו לקריא יותר..
הפיצ'ר כמובן תורם לעיקרון התכנות מונחה העצמים - אנקפסולציה



הפעולה תקבל שלושה מספרים ותחזיר את הממוצע בניהם.

ניתן לראות בבירור שמתקיימת יצירה של שתי פעולות פנימיות בתוך הפעולה.


פיצ'ר שביעי - More Expression Bodied Members:

פיצ'ר Expression Bodied Members הוצג לראשונה ב C# 6, כאשר ניתן היה להגדיר משתנים ופעולות באמצעות lambda expressions.

כיום ניתן לבצע את זאת גם על הפעולה הבונה (constructor) ועל ה-Properties:


גם השינוי הזה מגיע בכדי להפוך את הקוד ואלגנטי וקריא בהרבה.
בעתיד הקרוב אסקור את העולם העצום של ביטויי lambda יותר לעומק..

סיכום

היום הצגתי את השינויים העיקריים בגרסה החדשה של #C.
אני קורא לכם להוריד את הגרסה החדש של Visual Studio 2017 ולהתחיל לנסות!

הישארו תמיד הכי מעודכנים :)

אם אתם יודעים על שינויים נוספים שברצונכם לשתף, הגיבו כאן למטה!

תגובות

הוסף רשומת תגובה

פוסטים פופולריים מהבלוג הזה

תכנות מונחה עצמים | Dependency Inversion Principle

מהם קבצי DLL ואיך להשתמש בהם?

מה ההבדל בין אוטומציה לפיתוח רגיל