بایت لرن

آموزشهای برنامه نویسی ، امنیت و شبکه ،ترفند های کم یاب ، سورس کد ، طراحی وب ، اپلیکشن ، انجام پروژه های دانشجویی رایگان

ویژگی های جدید در سی شارپ 7

ویژگی های جدید در سی شارپ 7

سلام !

در پست قبلی (تغییرات جدید در سی شارپ 6) رو همراه با مثال مورد بررسی قرار دادیم ،

حال دوستان امروز میخواهیم با هم آپشن های جدیدی که در سی شارپ 7 اضافه شده رو معرفی کنیم پس در ادامه با بایت لرن همراه باشید.

1. تعریف توابع Local:

بوسیله این ویژگی شما می توانید به صورت local یک متد تعریف کنید. تا پیش از سی شارپ 7 این کار بوسیله Lambda Expression ها و Anonymous متدها امکان پذیر بود، اما بوسیله سی شارپ 7 این کار به صورت زیر انجام می شود:

public int MainMethod()
{
    int InnerMethod()
    {
        return 2;
    }
    return InnerMethod();
}

این روش نسبت به anonymous method ها و همینطور lamda expression ها مزایایی دارد:

  1. در این روش نیازی به تعریف delegate ندارید
  2. مدیریت closure ها به دلیل استفاده از local variable ها به راحتی انجام می شود

2. بازگرداندن چندین مقدار در متدها:

اگر به خاطر داشته باشید، در سی شارپ 6 به قبل، برای اینکه بتوانیم از یک متد چندین خروجی داشته باشیم می توانستیم از روش های زیر استفاده کنیم:

  1. استفاده از پارامترهای out
  2. استفاده از Tuple ها
  3. استفاده از یک Class یا Struct

در سی شارپ 7 این کار به راحتی و به صورت قابل پیاده سازی است:

(int, int) MyMethod(List<int> numbers)
{
// method body
}

همچنین شما می توانید آیتم های خروجی متد را نام گذاری کنید:

(int Sum, int Substract) MyMethod(List<int> numbers)
{
// method body
}

نحوه استفاده از این مدل متدها هم به صورت زیر است:

var numbers = new List<int>() { 2, 5, 6, 1, 5 };
var result = MyMethod(numbers);
Console.WriteLine(result.Sum);
Console.WriteLine(result.Substract);

متدهایی که چندین مقدار بازگشتی دارند در نوشتن کدهای asynchronous که همان توابع async می باشند بسیار کاربردی هستند.

پیشنهاد ما به شما!

           تغییرات جدید در سی شارپ 6

 

3. Tuple های Value Type:

در دات نت نوع داده ای وجود دارد به نام Tuple که یک کلاس generic است و می تواند چندین مقدار را در خودش ذخیره کند:

Tuple<int, int> items = new Tuple<int, int>(2, 6);

اما موضوعی که در اینجا مطرح است، Tuple ها Reference Type هستند و این موضوع باعث ایجاد اشیاء از این نوع در heap می شود که می تواند باعث بوجود آمدن overhead در برنامه ها شود. خوشبختانه در سی شارپ 7 ویژگی اضافه شده که امکان تعریف tuple ها را به صورت value type می دهد. برای اینکار کافیست در سی شارپ 7 به صورت عمل کنید:

var result = (5, 8);

همچنین امکان نام گذاری آیتم ها نیز وجود دارد:

var result = (item1: 5, item2: 8);

4. تطبیق الگو: بهینه سازی ساختار switch:

یکی از مشکلاتی که به شخصه در سی شارپ به شدت اون رو احساس می کردم عدم امکان گذاشتن فیلتر برای case ها بود. همچنین انجام یکسری کارها در این بخش نیاز به نوشتن کدهای زیادی داشت. به مثال زیر توجه کنید:

object value = 2;
var input = (int) value;
switch (input)
{
    case 1:
        break;
    case 2:
        break;
    case 3:
    case 4:
    case 5:
        break;                    
}

در کد بالا، ابتدا مقدار value به نوع int تبدیل شده و در ساختار switch استفاده شده است. همچنین در بدنه switch، برای مقادیر 3 و 4 و 5 به صورت مشخص case را نوشتیم. در سی شارپ 7 می توان کد بالا را به صورت زیر نوشت:

object value = 2;
switch(value)
{
    case int input when input = 1:
        break;
    case int input when input = 2:
        break;
    case int input when input >= 3 && input <= 5:
        break;
}

در کد بالا و قسمت case اول، در صورتی که value از نوع int باشد، مقدار آن تبدیل شده و داخل متغیر input ریخته شده و شرط قسمت when بررسی می شود. در صورت صحیح بودن شرط بدنه case اجرا می شود. همچنین در قسمت case سوم در قسمت شرط، ما بازه تعریف کردیم که این مورد یکی از آرزوهای دیرین برنامه نویسان سی شارپ بود که به لطف سی شارپ 7 این آرزو به واقعیت تبدیل شده است.

5. تطبیق الگو: تجزیه

قدرت اصلی تطبیق الگو در زبان سی شارپ در بخش تجزیه مشخص می شود. کد زیر را در سی شارپ 6 در نظر بگیرید:

var temp = person as Student
if (temp != null && temp.FirstName == "Hossein")
{
    var s = temp.LastName
}

در کد بالا ابتدا متغیر person بوسیله عملگر as به نوع student تبدیل می شود و در صورتی که مقدار temp مخالف null باشد و FirstName برابر Hossein متغیری با نام s ایجاد شده و LastName داخل آن قرار میگیرد. بوسیله تطبیق الگو و قابلیت تجزیه در سی شارپ 7 می توان کد بالا را به صورت زیر نوشت:

if (person is Student {LastName is var s, FirstName is "Hossein"})
{
}

شاید درک کد بالا کمی سخت به نظر بیاید، اما با کمی دقت می توان متوجه عملکرد کد بالا شد، در حقیقت کد بالا کارهای زیر را انجام می دهد:

  1. بررسی اینکه متغیر person از نوع student هست یا نه

و سپس در بین {}: متغیری با نام s ایجاد کن و مقدار LastName را داخل آن قرار بده

  1. بررسی کن که مقدار FirstName در متغیر person برابر Hossein هست یا نه.

ویژگی pattern matching در حال حاضر تحت نسخه preview می باشد و صد در صد تا زمان نسخه نهایی سی شارپ این ویژگی و سایر ویژگی ها دستخوش تغییرات زیادی خواهند شد.

6. Record Type ها

این نوع های داده که در سی شارپ 6 اضافه شده اند، در حقیقت کلاس هایی هستند که تنها شامل Property می باشند و کار نوشتن آن ها ساده شده است:

class Person(string firstname, string lastName);

کد بالا به صورت خودکار در زمان کامپایل به کد زیر تبدیل می شود:

class Person
{
    public Person(string firstName, string lastName)
    {
        this.firstName = firstName;
        this.lastName = lastName;            
    }
        
    private string firstName;
    private string lastName;

    public string FirstName
    {
        get { return firstName; }
        set { firstName = value; }
    }

    public string LastName
    {
        get { return lastName; }
        set { lastName = value; }
    }
}

7. Reference Type هایی که مقدار null قبول نمی کنند

همانطور که می دانید در زبان سی شارپ Reference Type ها می توانند مقدار null بگیرند، برای Value Type ها هم اینکار با تعریف Value Type ها به صورت Nullable امکان پذیر است. اما اگر بخواهیم یک Reference Type مقدار null قبول نکند. در سی شارپ 7 این کار به صورت زیر قابل انجام است:

string! name;
name= null; // compile error

یا

Dictionary!<int,Person> dict;


امکان تغییر شیوه بالا تا زمان ارائه نسخه نهایی وجود دارد.

8. تعریف نوع های immutable:

در زبان سی شارپ، نوع داده string به صورت immutable تعریف شده است، یعنی زمانی که شما مقدار یک رشته را تغییر می دهید، به جای اینکه مقدار آن رشته در حافظه تغییر کند، متغیر جدیدی ایجاد شده و مقدار جدید داخل آن قرار میگیرد. در سی شارپ 7 امکان تعریف نوع های immutable اضافه شده است:

public immutable class Point
{
    public int X {get;set;}
    public int Y {get;set;}


با تشکر از شما، دوستان میتوانید با عضویت در کانال تلگرامی ما جدیدترین مطالب و اخبار رو دریافت کنید .

آدرس کانال :

bytelearn@


مطالب مرتبط با این پست :

انواع عملگرها‌ در سی شارپ

انواع داده‌ها در سی شارپ

بررسی قابلیت های جدید سی شارپ 8

تغییرات جدید در سی شارپ 6

آنچه که باید درباره زبان برنامه نویسی سی شارپ بدانید

برنامه نویسی Net. چیست و چه کاربردی دارد؟


نظرات (۰)

هیچ نظری هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی
تمامی حقوق مطالب این سایت متعلق به گردانندگان آن است

Valid HTML 4.01!