الكلمة المحجوزة var في السي شارب

08 يناير 2017     384 مشاهدة    0 تعليق
تم النشر في #C# 

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

الـ var في نظر كثير من المطورين هي عبارة عن إختصار لعدم كتابة نوع المتغير. والمتغير المعرف يكون متغير متنوع أي يقبل قيمة من أي نوع, مثلما هو الحال في بعض اللغات البرمجية. دعونا نلقي نظرة على المثال التالي:

var firstName = "Hisham";
string lastName = "Bin Ateya";

من ناحية تقنية كلا من المتغييرين firstName و lastName من النوع string, فالفكرة أن المترجم يمكنة التنبؤ بنوع المتغير من نوع القيمة المسندة لذلك المتغير. لذا ليس علينا بالضرورة من تصريح نوع المتغير, وهذا هو الحال في المتغير firstName. من هذا نستخلص أن المتغير ليس متنوع أو انه dynamic مثل ما هو موجود في بعض اللغات البرمجية. فعند تصريح وتهئية المتغير firstName بقيمة نصية لإنه سيبقى نص, ولن يمكنك مثلا إسناد قيمة صحيحه إليه, وبالتالي لايوجد أي فرق من ناحية الأداء حيث أن المترجم سيقوم بكتابة نفس الـ IL لكلا من المتغييرين السابقين.

لماذا الـ var؟

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

ففي الإصدار الثالث للغة السي شارب ظهرت تقنية الـ LINQ والتي تعد أحد التقنيات الشيقة التي تم إضافتها للغة السي شارب, وهنالك شيء آخر تم إضافته لجعل تقنية الـ LINQ تعمل بشكل جيد الأ وهو الـ anonymous type وهو عبارة عن نوع مجهول ليس له إسم ( في الواقع له إسم ولكن لا نستطيع رؤيته ), لنرى المثال التالي:

var person = { FirstName = "Hisham", LastName = "Bin Ateya" };

هنا تم تعريف كائن اسند له نوع مجهول يحتوي على خاصيتين FirstName و LastName, هنا الحالة التي يجب علينا إستخدام الكلمة المحجوزة var فيها, لماذا؟ لأننا لو سألنا أنفسنا ماهو نوع المتغير person طبعا بالتعريف هو نوع مجهول لايمتلك أي إسم, وبالحقيقة لا توجد طريقة معينة للإشارة إليه, لهذا تم إستخدام الـ var لجعل المترجم يتعامل معاه.

وقد يسأل البعض لماذا أصلا نحتاج أن نعرف متغير مجهول, ببساطه دعونا نستعرض مثال أخير:

var result = from p in db.People
             where p.FirstName.StartWith("H")
             select new { p.FirstName, p.LastName };

فالمثال أعلاه يجبرنا على إستخدام الـ var لأنه تم إختيار خواص معينه من النوع Person, لذا النوع المجهول هو الأحل الأنسب في مثالنا السابق.

قيود إستخدام الـ var

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

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


اكتب تعليقك