در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آشنایی با قابلیت های جدید سی شارپ 7.0

هنوز چند ماهی از ارائه Visual Studio 2015 و C# 6.0 نگذشته که مایکروسافت پیش نمایش نسخه بعدی Visual Studio و سی شارپ 7 رو عرضه کرده. از لینک زیر می تونید پیش نمایش Visual Studio 15 رو دانلود کنید و به بررسی امکانات جدید اون بپردازید:

دانلود Visual Studio 15 Preview

در این مطلب قصد داریم تا با برخی از ویژگی هایی که تا این لحظه در سی شارپ 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 می باشند بسیار کاربردی هستند.

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 هست یا نه

و سپس در بین {}:

  1. متغیری با نام s ایجاد کن و مقدار LastName را داخل آن قرار بده
  2. بررسی کن که مقدار 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;}
}

در صورتی که تغییراتی در این ویژگی ها اعمال شود، به صورت مطالب جداگانه به اطلاع دوستان عزیز ITPRO ای خواهد رسید. ITPRO باشید

نویسنده: حسین احمدی

انجمن تخصصی فناوری اطلاعات ایران

#سی_شارپ_7 #آخرین_نسخه_سی_شارپ #امکانات_زبان_سی_شارپ #ویژگی_های_سی_شارپ_7 #قابلیت_های_جدید_زبان_سی_شارپ
3 نظر
فرشید علی اکبری

سلام

واقعاً از امکاناتی که در نسخه جدید قراره در دسترس مون قرار بگیره خیلی حال کردم.

تشکر از اطلاع رسانی تون.

سعد شمسائی

سلام. ممنون آقای احمدی. درباره سی شارپ 7.0 اینو میتونید ترجمه کنید؟ (جدیده):

https://msdn.microsoft.com/magazine/mt790184?wt.mc_id=DX_876708

سعد شمسائی

دوستان فیسبوکی اگه میخواید همیشه از تازه های دنیای برنامه نویسی دات نت مطلع باشین این صفحه رو لایک کنید و در نیوز فید علامت See First رو تیک بزنید:

https://www.facebook.com/dotnetworld.org/

این دو تا هم گه گاه چیزای خوبی خبر میدن:

https://www.facebook.com/Dotnet/

https://www.facebook.com/DotNetTricks/

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....