المعامل Null Propagating في السي شارب

10 مارس 2017     335 مشاهدة    0 تعليق
تم النشر في #C# Null Propagation 

سنتطرق اليوم إلى إحدى مزايا لغة السي شارب والتي تم إضافتها في الإصدار السادس ألا وهي الـ Null Propagation وألتي أتت أساساً لإزالة جميع الشروط الغير لازمه لتفادي الإستثناء NullReferenceException. دعونا نستعرض اليوم كيف سيساعد هذا المعامل الجديد لكتابة شيفرات واضحه ونظيفة.

لنفترض أن لدينا الفئة التالية:

public class Person
{
  public int Id { get; set; }
  public string Name { get; set; }
  public List<Person> Children { get; set; }
}

لنفترض السيناريو التالي وهو القيام بطباعة أول إبن للشخص إذا كان لديه أبناء وإلا فقم بطباعة أن الشخص لا يوجد لدية أبناء. طبعاً لو تأملنا لبرهه فحدوث الإسثناء NullReferenceException وارد في حالتنا, خصوصاً إذا أردنا الوصول أول عنصر في الخاصية Children فلربما تكون القائمه null أو لا تحتوي على أية عناصر.

لنرى كيف يمكننا كتابة الشيفره المطلوبه:

var peron = new Person { Name = "John Doe" };
if (customer.Children != null)
  if (person.Children.FirstOrDefault() != null)
    Console.WriteLine(person.Children.First().Name);
  else
    Console.WriteLine("The person doesn't have children");
else
  Console.WriteLine("The person doesn't have children");

نلاحظ من المثال السابق أننا قمنا بفحص إمكانية وجود الـ null مرتين وذلك بإستخدام الـ if .. else, فماذا لو كان لدينا الكثير من الحالات هذه في برنامج كبير؟!!

كما رأينا سابقاً أنه معالجة الـ null بالشروط ولتفادي حدوث الإستثناء NullReferenceException.

ألآن سوف نستعرض كيفية إستخدام المعامل الجديد لتبسيط الشيفرة المصدرية السابقة:

var peron = new Person { Name = "John Doe" };
Console.WriteLine(person.Children?.FirstOrDefault()?.Name ?? "The person doesn't have children");

طبعاً قد يستغرب البعض أنه تم تحويل تلك الشروط إلى سطر واحد!! فتم إزالة تلك الشروط الغير لازمة بهذا المعامل, وكذلك نلاحظ إستخدام المعامل Null Coalescing الذي سيساعد في هذا الحالة إذا كانت قيمة الطرف الأيسر null فإنه سيقوم بإرجاع القيمة الموجود على الطرف الأيمن.

أرجو أن يكون هذا المعامل الجديد يعطي دفعه معنويه لكم لتبسيط شيفراتكم السابقة, ويجعلكم تكتبوها بشكل أوضح.

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


اكتب تعليقك