تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
Null-conditional operator
#1
بسم الله الرحمن الرحيم
((رب اشرح لي صدري ويسر لي أمري وأحلل عقدة من لساني يفقهوا قولي))


Null-conditional operator ( ?. ) in C#.NET


هي احدى الإضافات الجديدة في لغة C# الإصدار السادس وما بعدها
وظيفتها الرئيسية هي تفادي احتمالية حدوث الاستثناء (NullReferenceException) في البرنامج الذي تكتبه بالإضافة الى تقليل عدد الاسطر في الكود البرمجي.
لنبيّن ذلك بالامثلة قبل وبعد استخدام (operator .? )


لو فرضنا أنه لديك الكلاس التالي: 
PHP كود :
public  class Student
{
 
   public  string Fullname getset; }
 
   public  int Age getset; }


فلو طلب منك طباعة اسم الأول للطالب فقط وليس الاسم الكامل:

ستقوم بحل السؤال بهذه الطريقة :

أولا تتأكد من أن الاسم ليس فارغا (null) ومن ثم تقوم بعملية اقتصاص الجزء الأول من الاسم بالطريقة القديمة كما يلي:
PHP كود :
if (std.Fullname != null)
{
 
   var fname std.Fullname.Substring(0std.Fullname.IndexOf(" "));
 
   WriteLine(fname);
}
else
 
   WriteLine("Fullname is null"); 

واذا لم تقم بتطبيق شرط على الاسم وكتبتها بالشكل التالي مباشرة:
PHP كود :
var fname std.Fullname.Substring(0std.Fullname.IndexOf(" "));
WriteLine(fname); 

في هذه الحالة سيحدث استثناء من نوع (NullReferenceException) إن كان الاسم (Fullname) فارغاً ، لتفادي ذلك قمنا بكتابة شرط أعلاه.

 
أما بالطريقة الجديدة فلا حاجة لكتابة شرط للتأكد من الاسم ، ويتم استعمال (.?) بدلاً من كتابة الشرط كما يلي:
PHP كود :
var fname std.Fullname?.Substring(0std.Fullname.IndexOf(" "));
WriteLine(fname); 

في هذه الحالة سيتم اسناد null الى المتغير fname إن كان الاسم فارغاً بدل حدوث الاستثناء وتوقف البرنامج، وبهذا قمنا بتقليل عدد الاسطر البرمجية بالإضافة الى ذلك تفادينا حدوث توقف للبرنامج.


وبإمكانك استخدام 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 بدل الاستثناء بصورة تلقائية.

لا تنوسنا و والديّ من صالح دعواتكم.
الرد
تم الشكر بواسطة: silverlight , ابو ليلى
#2
الاضافات البسيطة هذه مهمة في اي لغة برمجية
بارك الله فيك

انا غالبا باستخدم دالة مثل هذه في الفيجوال بيسك

PHP كود :
   Public Function Nullable(Of T)(value As T) As T
        Return 
(If((value Is Nothing), Nothingvalue))
 
   End Function 

لكن لدي سؤال

سؤالي
هل من وجهة نظرك الدالة اعلاه تساوي التعديل الجديد في لغة #C
الرد
تم الشكر بواسطة: Sajad , ابو ليلى , ابو ليلى
#3
حياك الله اخي العزيز

بالتأكيد هي مهمة جدا حيث تسهل عمل المبرمج ويؤثر على سرعة البرنامج وتقلل الاخطاء

من المنطلق أعلاه التغيير هذا في لغة C# تعتبر اسرع وافضل بالطبع لكن من حيث المبدأ تستطيع بناء دالة مثلما فعلت حضرتك للتأكد بنفسك من قيم الnull لكن هل تساوي؟ من حيث المبدأ ومن وجهة نظري نعم. أما الاختلاف هذه تكتبها أنت أم التعديل الجديد تكون مدمجة في اللغة.

تحياتي لكم ورمضان كريم عليكم
الرد
تم الشكر بواسطة: ابو ليلى


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  Ternary operator in C#.NET Sajad 3 1,828 23-01-19, 08:22 PM
آخر رد: Sajad
  null-coalescing operator Sajad 1 1,239 17-07-17, 02:16 PM
آخر رد: Amir_Alzubidy

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم