زبان برنامه نویسی سی شارپ و ویژگی های آن

زبان برنامه نویسی سی شارپ

زبان برنامه نویسی سی شارپ ، در این مقاله می خواهیم در مورد سی شارپ و پارامترهای Nullable صحبت کنیم .

به طور کلی هر پارامتی که در سی شارپ معرفی می شود به صورت پیش فرض Nullable هستند ولی اگر بخواهید به صورت کاملا واضح پر یا خالی بودن پارامتر را در بیابید بهتر است که بعد از تعریف نوع پارامتر خود از علامت سوال ? استفاده نمایید.

این یک ویژگی کاملا اختیاری است ولی ماکروسافت قصد دارد در پروژه های جدید خود و در سی شارپ ۸ این ویژگی را که پیش فرض بوده است بیان کند.

Warning ها به هشدار های بالقوه و صرفا cosmetic شده گفته می شود برای مثال کد p.MiddleName یک رشته است که همان warring cosmetic گفته می شود .


string middleName = p.MiddleName;

همچنین کتابخانه ها هم از این ویژگی خطا ندارند ، زیرا کامپایلر مربوط به کتابخانه نمی تواند تشخیص دهد که آیا متغییر خالی هست یا نه ؟

استفاده از عبارت switch در زبان برنامه نویسی

بلوک‌های switch معمولاً برای بازگشت به یک مقدار واحد استفاده می‌شوند.

در این سناریوی رایج، نحو آن در مقایسه با آنچه انجام‌شده، بسیار مفصل است.

این مثال را با استفاده از تطبیق الگو در نظر بگیرید.

static string M(Person person)
{
    switch (person)
    {
        case Professor p:
            return $"Dr. {p.LastName}";
        case Studen s:
            return $"{s.FirstName} {s.LastName} ({s.Level})";
        default:
            return $"{person.FirstName} {person.LastName}";
    }
}

شما می توانید با استفاده از یک proposal جدید موارد تکراری را در کدتان حذف نمایید این منجر به یک کد جدیدتر و فشرده تر می شود.

static string M(Person person)
{
    return person switch
    {
        Professor p => $"Dr. {p.LastName}",
        Student s => $"{s.FirstName} {s.LastName} ({s.Level})",
        _ => $"{person.FirstName} {person.LastName}"
    };
}

البته این کد هنوز جای بحث است به عنوان مثال هنوز مشخص نشده است که از => یا : استفاده می کند برای جدا کردن عبارت باید از مقدار بازگشتی استفاده نمایید.

مچ کردن الگوی property در زبان برنامه نویسی سی شارپ

در حال حاضر تطبیق الگوی property از طریق شرط زمانی امکان پذیر است


case Person p when p.LastName == "Cambell" : return $"{p.FirstName} is not enrolled";

با استفاده از الگوی مالکیت می توان آن را کاهش داد.

case Person { LastName: "Cambell"} p : return $"{p.FirstName} is not enrolled";

یک فایده ی کوچک که دارد این است که کد را واضح تر می کند و کد تمیز می شود و یک نمونه ی اضافی از متغییر را حذف می کند.

برداشت ویژگی ها از الگو در زبان برنامه نویسی سی شارپ

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

case Person { LastName: "Cambell", FirstName: var fn} p : return $"{fn} is not enrolled";

الگوهای بازگشتی در زبان برنامه نویسی سی شارپ

در کد زیر ما یک کلاس دانش آموز تعریف کردیم که یک سری صفات دارند و یک کلاس معلم که آن هم یک سری صفات برایش ترجمه شده است حال باید این دو کلاس را با هم مقایسه کنیم و ببینیم از چه شی هایی تعریف شده اند.


case Person ( var fn, _, "Cambell" ) p : return $"{fn} is not enrolled";

در خط بالا کدی که نوشتیم:

  • اسم دانش آموزش را بیرون کشیدیم
  • MiddleName در آن استفاده نشده است
  • نام خانوادگی دانش آموز را به cambell تعریف کردیم
  • و شی های این دو کلاس را در کنار هم قرار دادیم
  • و در آخر نام خانوادگی کلاس استاد را در آوردیم

عبارت index در زبان برنامه نویسی سی شارپ

تعریف کردن رنج برای رشته ها خطای ناشی از صفت را برای روبه رو شدن با آرایه از بین می برد.
عملگر ^ را می توان در انتهای لیست قرار دارد به این معنی است که آخرین مقدار یک رشته را می توان بدست آورد.

case Student ( var fn, _, "Cambell", var (_, _, ln) ) p : return $"{fn} is enrolled in {ln}’s class";

یا به سادگی

var lastCharacter = myString[myString.Length-1];

این کار با مقدار محاسبه شده مانند زیر است:

var lastCharacter = myString[^1];

Range Expressions در برنامه نویسی زبان سی شارپ

ارتباط نزدیکی بین range و index وجود دارد در خط زیر یک مثال ساده در مورد دریافت رشته را برای شما بیان می کند.

Index nextIndex = ^(x + 1);
var nextChar = myString[nextIndex]

این می تواند با عبارت index ترکیب شود در خط پایین اولین و آخرین کاراکتر صرف نظر می کنیم.


var s = myString.Substring[0..2];

همچنین برای آرایه هم استفاده می شود.


var s = myString.Substring(1..^1);

توجه داشته باشید که اولی شامل عدد بوده و دومی منحصرا مخصوص عدد بوده است.


Span<int> slice = myArray[4…۸];

برای به دست آوردن یک برش با تمام عناصر که از یک شاخص آغاز می‌شوند، دو گزینه وجود دارد.


Span<int> rest = myArray[8..];
Span<int> rest = myArray[8..^0];

همچنین می توانید فهرست اول را حذف نمایید.


Span<int> firstFour = myArray[..4];

از موارد تفاوتی که در سی شارپ هست این است که در انتهای آرایه های رشته از index استفاده می شود.

IAsyncDisposable در زبان برنامه نویسی سی شارپ

همان طور که میبینید .Interface ها به اشیا اجازه می دهند تا یک متد DisposeAsync را نشان دهد در این ارتباط با این متد جدید با استفاده از این متد شما می توانید به راحتی بلوک ها را صدا بزنید و آن ها را dispose کنید

Asynchronous Enumerators در زبان برنامه نویسی سی شارپ

مانند IEnumerable <T>، IAsyncEnumerable <T به شما اجازه می‌دهد یک فهرست محدود از طول نامعلوم را شمارش نمایید.

این تطبیق پذیری با این حال کمی متفاوت به نظر می‌رسد.

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


Task&amp;lt;bool&amp;gt; WaitForNextAsync();
T TryGetNext(out bool success);

یک ویژگی جالب از این رابط این است که به شما اجازه می دهد تا دسته های مختلف را فراخوانی نمایید و زمانی که return success ها مقدارشان false شد آن گاه می توانید WaitForNextAsync را فراخوانی کنید تا دسته ی جدید به دست آید.

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

اگر از داده ها در حافظه ی بافر استفاده کنید برای دسترسی به داده ها باید کمی منتظر بمانید.

به طور ایده‌آل شما اغلب از این واسط‌ها به طور مستقیم استفاده نمی‌کنید.

در عوض مایکروسافت از شما می‌خواهد که از “foreach await” که به عنوان یک iterator غیر همزمان معروف است استفاده کنید.

این کار به فراخوانی سیستم همگام یا ناهمگام نیاز دارد.

Default Interface Methods در برنامه نویسی زبان سی شارپ

این ویژگی بحث بر انگیز هنوز از جاوا و سی شارپ برای این زبان ها مانده است به طور خلاصه به شما اجازه می دهد تا با افزودن متد های جدید با الگو های مچ سازی یک رابط را استنتاج کنید این روش جدید break backwards را از بین نخواهد برد.

Records

آن ها syntax هایی برای ایجاد سریع کلاس های تغییر ناپذیر هستند ما نخست این را در سال ۲۰۱۴ دیدیم.

مانند مثال زیر:


class Person(string FirstName, string LastName);

اساساً این یک کلاس است که به طور کامل توسط امضا constructor سازنده تعریف می‌شود.

تمام ویژگی‌ها و روش‌هایی که شما از یک کلاس تغییر ناپذیر انتظار دارید به طور خودکار تولید می‌شوند.

 


زهره سلطانیان

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.