بسم الله الرحمن الرحيم
((رب اشرح لي صدري ويسر لي أمري وأحلل عقدة من لساني يفقهوا قولي))
Null-conditional operator ( ?. ) in C#.NET
هي احدى الإضافات الجديدة في لغة C# الإصدار السادس وما بعدها
وظيفتها الرئيسية هي تفادي احتمالية حدوث الاستثناء (NullReferenceException) في البرنامج الذي تكتبه بالإضافة الى تقليل عدد الاسطر في الكود البرمجي.
لنبيّن ذلك بالامثلة قبل وبعد استخدام (operator .? )
لو فرضنا أنه لديك الكلاس التالي:
وظيفتها الرئيسية هي تفادي احتمالية حدوث الاستثناء (NullReferenceException) في البرنامج الذي تكتبه بالإضافة الى تقليل عدد الاسطر في الكود البرمجي.
لنبيّن ذلك بالامثلة قبل وبعد استخدام (operator .? )
لو فرضنا أنه لديك الكلاس التالي:
PHP كود :
public class Student
{
public string Fullname { get; set; }
public int Age { get; set; }
}
فلو طلب منك طباعة اسم الأول للطالب فقط وليس الاسم الكامل:
ستقوم بحل السؤال بهذه الطريقة :
أولا تتأكد من أن الاسم ليس فارغا (null) ومن ثم تقوم بعملية اقتصاص الجزء الأول من الاسم بالطريقة القديمة كما يلي:
ستقوم بحل السؤال بهذه الطريقة :
أولا تتأكد من أن الاسم ليس فارغا (null) ومن ثم تقوم بعملية اقتصاص الجزء الأول من الاسم بالطريقة القديمة كما يلي:
PHP كود :
if (std.Fullname != null)
{
var fname = std.Fullname.Substring(0, std.Fullname.IndexOf(" "));
WriteLine(fname);
}
else
WriteLine("Fullname is null");
واذا لم تقم بتطبيق شرط على الاسم وكتبتها بالشكل التالي مباشرة:
PHP كود :
var fname = std.Fullname.Substring(0, std.Fullname.IndexOf(" "));
WriteLine(fname);
في هذه الحالة سيحدث استثناء من نوع (NullReferenceException) إن كان الاسم (Fullname) فارغاً ، لتفادي ذلك قمنا بكتابة شرط أعلاه.
أما بالطريقة الجديدة فلا حاجة لكتابة شرط للتأكد من الاسم ، ويتم استعمال (.?) بدلاً من كتابة الشرط كما يلي:
أما بالطريقة الجديدة فلا حاجة لكتابة شرط للتأكد من الاسم ، ويتم استعمال (.?) بدلاً من كتابة الشرط كما يلي:
PHP كود :
var fname = std.Fullname?.Substring(0, std.Fullname.IndexOf(" "));
WriteLine(fname);
في هذه الحالة سيتم اسناد null الى المتغير fname إن كان الاسم فارغاً بدل حدوث الاستثناء وتوقف البرنامج، وبهذا قمنا بتقليل عدد الاسطر البرمجية بالإضافة الى ذلك تفادينا حدوث توقف للبرنامج.
وبإمكانك استخدام Nested Null-conditional operator:
الطريقة القديمة:
وبإمكانك استخدام Nested Null-conditional operator:
الطريقة القديمة:
PHP كود :
if (std != null && std.Fullname != null)
WriteLine(std.Fullname.Length);
else
WriteLine("Fullname is null");
باستخدام الطريقة الجديدة:
PHP كود :
WriteLine(std?.Fullname?.Length);
اذاً (.?) يعمل بمثابة شرط بدلاً من استخدام (if) الشرطية . وأيضا سيتم اسناد null بدل الاستثناء بصورة تلقائية.
لا تنوسنا و والديّ من صالح دعواتكم.