المزايا الجديدة في الـسي شارب 6

01 مارس 2016     705 مشاهدة    0 تعليق
تم النشر في #C# 

اليوم سنستعرض معكم المزايا الجديدة في السي شارب 6, طبعاً جميع هذه المزايا يمكنك إستخدامها في الفيجوال ستديو 2015 , و أريد أن أنوه أنها ليست محصوره على آخر إصدار للغة, لذلك يمكنك إستخدامها في إصدارات بيئة الدوت نت السابقة, لكن يستوجب عليك إستخدام إصدار الفيجوال ستديو المذكور أعلاه.

Auto-property initializers

أصبح بالإمكان من إسناد قيمة إفتراضية لأي خاصية تلقائية.

public int Age { get; set; } = 15;

Read-only auto-properties

كما هو معروف أن لغة السي شارب تدعم الخواص القابلة للقراءة فقط, وكذلك الخواص التلقائية والتي لا تحتاج من المبرمج إستخدام متغير خاص. لذا أتت هذه الميزة لتمكن المبرمجين من إنشاء خواص قابلة للقراءة فقط وتعيين قيمة إفتراضية لها.

public int CookieName { get; } = ".AspNet.Session";

Static imports

أتت هذه الميز لتسهيل الوصول للبيانات الساكنة Static بدون ذكر إسم الفئة التي تنتمي لها.

using static System.Console;

class Program
{
static void Main()
{
WriteLine("Hello, World");
}
}

فنلاحظ أنه تم إستخدام الفئة Console كـ Namespace وتم الوصول للإجراء WriteLine() بدون ذكر إسم الفئة.

Index initializer

كما هو من المعروف أن لغة الشي شارب تدعم تهئية المتغيرات والخواص الخاص بالكائنات والمجاميع Collections, إلا أن تم إضافة ميزة أخرى وهي التهيئة بواسطة إستخدام الدليل.

var names = new Dictionary<int, string> {
[3] = "Scott",
[5] = "Dave",
[7] = "Peter"
};

لو نلاحظ في المثال السابق أنه تم تهئية القاموس بواسطة الدليل, وذلك عوضاَ عن الطرق السابقة التي يتم بها التهيئة كتمرير المفاتيح والقيم كمصفوفة.

Await in catch/finally

في الإصدار الخامس من لغة السي شارب كان لا نستطيع إستخدام الكلمة المحجوزة await داخل بلوك الـ catch أو الـ finally, لذا تم دعم هذا الشيء في الإصدار السادس.

Exception filters

عملية فلترة الإستثناءات من الميزات التي كان يتمناها مبرمجوا لغة السي شارب, والتي كانت موجودة أصلاً في الفيجوال بيسك, لكن أخيراً تم دعم هذه الميزة في هذا الإصدار.

try { … }
catch (Exception ex) when (myfilter(ex))
{

}

Expression-bodies members

هذه هي أحد الميزات التي انفردت بها لغة السي شارب عن لغة الفيجوال بيسك في آخر إصدار. تمكننا هذه الميزة من تعريف المتغيرات, الخواص والدوال كـ Lambda Expression.

public string FullName => FirstName + " " + LastName;

public void Print() => Console.WriteLine(FullName);

Null-conditional operators

هذا المعامل الجديد ماهو إلا إختصار لعملية فحص الـ null. فبدل إستخدام الجمل الشرطية كما هو متعارف عليه سابقاً يمكنننا ببساطه إستخدام هذا المعامل الجديد.

if(person?.Age > 15) ...

Console.WriteLine(person?.ToString());

فنلاحظ أنه سيتم إستدعاء الخاصية Age والدالة ToString() فقط لو كان الكائن person ليس null.

var people = new List<Person>();
var person = people?[1];

ونفس الشيء هنا سيتم الحصول على الكائن الثاني من الكائن people إذا كان ليس null.

String Interpolation

عملية توليد النصوص التي تحتوي عبارات برمجية أصبحت أسهل مما كان عليه في السابق, فكان الخيار الأنسب سابقاً للمبرمجين هو إستخدام الدالة String.Format().

فيمكننا الآن إستخدام

var greeting = $"Hello, {person.FirstName} {person.LastName}.";

بدلاً من

var greeting = string.Format("Hello, {0} {1}.",person.FirstName,person.LastName);

فالآن يمكننا وضع العبارات البرمجية نفسها ضمن النص بيسر وسهولة.

nameof Operator

المعامل nameof هو من أفضل طرق تضمين الكائنات البرمجية كنصوص في الشفرة المصدرية. لنلقي نظرة على المثال التالي:

if(name == null) throw new ArgumentNullException("name");

سنلاحظ عند حصول الإستثناء سيتم تمرير النص "name" كدلالة على المتغير الذي أحدث هذا النوع من الإستثناء, لكن لو تمعنا لبرهة من الزمن, ماذا سيحصل لو تم تغير المتغير name؟!! لن يتم تغيير النص في الإستثناء, مما سيحدث تضارب في المعلومات, فما هو الحال لو كان معنا مئات أو الآف من الأسطر البرمجية بالتأكيد الأمر مشكلة لا محالة, لذا بإستخدام المعامل الجديد يمكننا إعادة صياغة الشفرة المصدرية كالتالي:

if(name == null) throw new ArgumentNullException(nameof(name));

طبعاً تغيير بسيط ولكن يعني الكثير, فبإستخدام هذا المعامل سيتم تغيير المتغير name إلى النص "name" فلو تم تغيير المتغير سيطلع لنا خطأ قبل تشغيل البرنامج, لذا لن تحصل المشكله السابقه مجدداً.

Extension Add in collection initializer

تم إضافة الإجراء Add كـ Extesnion Method, والذي تستدعى عندما تم تطبيق ميزة تهيئة المجاميع Collection.

تويتر فيسبوك قوقل + لينكد إن


اكتب تعليقك