December 2, 2022

האם סי-שארפ נהייתה יותר פשוטה?

CSharp 9.0

סי-שארפ שפה מאוד יציבה אך היא מוכיחה שוב ושוב בגמישותה.

Top-level statements

כל פעם שיצרנו פרוקייט חדש ב-C# הוא יצר לנו קובץ בשם Main.cs עם המחלקה הבאה:

1
2
3
4
5
6
7
8
9
10
11
12
using System;

namespace MyNameSpace
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}

כדי לכתוב תכנית פשוטה היינו צריכים:

  • חייבים לייבא את System.
  • להשתמש ב-Namespace.
  • ליצור מחלקה - Program.
  • ליצור פונקציית Main.

זה קוד שאנחנו קוראים לו Boilerplate code - קוד משוכפל.
הוא הכרחי, הוא קיים, והוא קיים בכל כך הרבה קבצים ופרוייקטים אך אי אפשר להוריד אותו ללא תמיכת השפה.

Boilerplate code

קוד שהוא Boilerplate בדרך כלל אפילו לא נקרא אלה רק קיים שם כדי להוכיח את קיומו.
כל משפטי ה-using הם כאלו.
הצהרה על מחלקת Program היא כזו.

ב-C# נלחמים בתופעה הזו החל מגרסאותיה הראשונות:
התכונה הראשונה שבאמת נלחמה ב-boilerplate אלה הם התכונות - properties.

במקום לכתוב את הדבר הבא:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Person
{
private string mName;

public string GetName()
{
return mName;
}

public void SetName(string name)
{
mName = name;
}
}

הקומפיילר יודע לייצר לנו קוד כזה ע”י שימוש ב-properties:

1
2
3
4
public class Person
{
public string Name { get; set;}
}

מאחורי הקלעים הוא עדיין יוצר שני מתודות ל-get ו-set וfield אבל הקומפיילר עושה את זה עבורנו.

Records

מאפיינים גרמו לנו לכתוב הרבה מחלקות עם מידע בלבד - מחלקות כאלו נקראות מודלים - Models.

1
2
3
4
5
6
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}

שזה לשם עצמו יצר boilerplate.

כדי לתקן את זה יצרו מחלקות חדשות בשם records:

1
public record Person(string FirstName, string LastName, int Age);

כעת ניתן בשורה אחת ליצור מודלים עם Type משלנו.
ליצור Type בהתאמה אישית עוזרת לנו ליצור ספריות יותר ברורות.
ניתן היה להשתמש ב-ValueTuple<string,string,int> אך זה אף פעם לא נוח כי אין לנו שמות לפונקציות ולמידע של המחלקה.

הקסם של הקומפיילר

הקומפיילר של C# מייצר לנו קוד רב.

אם לקחת את דוגמת ה-Record השורה למעלה מייצרת לנו את הקוד הבא מאחורי הקלעים:

כמה דברים חשובים שאנו רואים פה:

ToString

הקומפיילר מייצר לנו ToString לכל ה-Memberים.

1
2
Person p = new Person("Bob", "Bobson", 42);
Console.WriteLine(p.ToString());

מודפס:

Person { FirstName = Bob, LastName = Bobson, Age = 42 }.

Equals ו- ==

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

1
2
3
4
5
6
Person p2 = new ("Alice", "Alison", 37);
Person p3 = p;

Console.WriteLine(p == p2);
Console.WriteLine(p.Equals(p2));
Console.WriteLine(p == p3);

שימו לב שפה אנו משמיטים גם את סוג המחלקה כאשר אנו משתמשים ב-new.
פיצ’ר חדש של C# 9!

יודפס:

1
2
3
False
False
True

Deconstruct

לבצע פירוק לגורמים של המחלקה:

1
2
3
4
5
Person p = new ("Bob", "Bobson", 42);
(string FirstName, string LastName, _) = p;

Console.WriteLine(FirstName);
Console.WriteLine(LastName);

יודפס:

1
2
Bob
Bobson

שימו לב שניתן בעזרת _ להשמיט פרמטרים שלא רוצים אותם!


החידושים של C# תמיד הכי מודרניים וכבר שני עשורים שהיא מובילה בתכונותיה ובטכנולוגיות שלה.
ניתן ליצור ממשקי משתמש דסקטופיים, לפתח משחקים, שרתים, APIים ועוד!

תודה על הקריאה :)

על הפוסט

הפוסט נכתב על ידי Ilya, רישיון על ידי CC BY-NC-ND 4.0.

שתפו את הפוסט

Email Facebook Linkedin Print

קנו לי קפה

#Software#CSharp#CSharp9