Nullable Value Types في VB2008 - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : Nullable Value Types في VB2008 (/showthread.php?tid=5348) |
Nullable Value Types في VB2008 - oneyemenweb2 - 06-10-12 منقول من المنتدى القديم الكاتب samerselo -- بحثت ولم اجد الموضوع قد نقل من قبل-- في بعض الأحيان نتعامل مع قيمة ذات نوع ولكنها قد لا تملك قيمة محددة في حالات معينة فحقل في قاعدة بيانات مثلا يمكن تمييزه بين أن له قيمة ذات معنى أو أن ليس له قيمة أبدا. عندها يمكننا توسيع أنواع القيم لتأخذ إما قيما عادية أو قيم لا شئ null Value وهذا التوسيع يدعى nullable type. كل nullable type يتم إنشاؤه من التركيب Nullable(T). ففي المثال التالي يتم التصريح عن متغير يحمل النوع Nullable Boolean Type كما يلي كود : Dim ridesBusToWork1? As Boolean فالمتغير ridesBusToWork يمكن أن يحمل القيمة True أو القيمة False أو أن لا يحمل أي قيمة إطلاقا وتكون القيمة الافتراضية له هي أنه لا يحمل أي قيمة وفي هذه الحالة قد يعني أنه لم يتم الحصول على تلك المعلومة من ذلك الشخص وفي المقابل القيمة False قد تعني أن الشخص لا يركب الباص للعمل. يمكنك التصريح عن متغيرات أو خصائص أو حتى مصفوفات أو إجراءات من nullable types كما يمكنك إعادة Nullable type من وظيفة ما. ولكن لا يمكنك إنشاء nullable type من نوع مرجعي Reference type مثل المصفوفات أو الفئات أو String فالنوع الأساسي يجب أن يكون نوع بالقيمة Value type تعتبر الخصائص HasValue و Value هي العناصر الأكثر أهمية في nullable type فمن أجل متغير من النوع nullable type تخبرنا الخاصية HasValue فيما إذا كان للمتغير قيمة محددة أم لا فإن كانت قيمة تلك الخاصية True عندها يمكنك قراءة قيمة المغير من الخاصية Value ويجب عليك الانتباه إلى أن كلتا الخاصيتين HasValue و Value هما خاصيتين للقراءة فقط. عندما تصرح عن متغير من النوع nullable type تكون القيمة الافتراضية للخاصية HasValue هي False وهذا يعني أن المتغير في الحالة الافتراضية لا يحمل أي قيمة محددة عوضا عن القيمة الافتراضية لنوع القيمة المؤسس لهذا النوع ففي المثال التالي لا يكون للمتغير numberOfChildren قيمة محددة مع أن القيمة الافتراضية للنوع Integer هي الصفر كود : Dim numberOfChildren? As Integer وتكون القيمة لا شئ Null Value مفيدة لتوضيح أن قيمة المتغير غير معروفة أو غير محددة فإن تم التصريح عن المتغير numberOfChildren على أنه Integer فلن يكون هناك قيمة تشير إلى أنه لم يتم توفير المعلومات المطلوبة بعد كما يمكن ضبط قيمة المتغير من النوع nullable type بالطريقة الاعتيادية كما في المثال التالي الذي يضبط قيمة للمتغير numberOfChildren الذي تم التصريح عنه في المثال السابق كود : numberOfChildren = 2 وإن كانت لمتغير أو خاصية من النوع nullable type قيمة محددة يمكنك إعادتها للقيمة الأساسية بعدم احتوائها على قيمة وذلك بضبطها إلى Nothing كما في المثال كود : numberOfChildren = Nothing مع انه يمكنك ضبط القيمة Nothing للمتغير من النوع Nullable type إلا أنه لا يمكنك فحصه بالمقارنة مع Nothing باستخدام علامة المساواة وتكون قيمة المقارنة التي تستخدم علامة المساواة مثل someVar = Nothing دائما مساوية لـ Nothing. بدلا عن ذلك يمكنك فحص قيمة الخاصية hasValue من اجل القيمة False أو باستخدام المعامل Is أو المعامل IsNot للحصول على القيمة المخزنة في متغير من النوع nullable type يجب عليك أولا فحص الخاصية HasValue للتأكد من أنها تحمل قيمة فإن حاولت قراءة قيمة ذلك المتغير وكانت قيمة خاصيته HasValue مساوية لـ False سوف يقوم فيجول بايزيك بإطلاق استثناء InvalidOperationException ويرينا المثال التالي الطريقة المنصوح بها لقراءة قيمة المتغير numberOfChildren الخاصة بالمثال السابق كود : If numberOfChildren.HasValue Then عندما يتم استخدام متغيرات من النوع Nullable Boolean في التعابير المنطقية يمكن أن تكون القيمة True أو False أو Nothing وفيما يلي جدول الحقيقة من أجل And و Or بما أن b1 و b2 يملكان ثلاثة قيم محتملة يكون هناك تسعة احتمالات للمقارنة b1 b2 b1 And b2 b1 Or b2 Nothing Nothing Nothing Nothing Nothing True Nothing True Nothing False False Nothing True Nothing Nothing True True True True True True False False True False Nothing False Nothing False True False True False False False False عندما تكون قيمة المتغير المنطقي أو التعبير Nothing فالقيمة هي ليست True و ليست False أيضا انظر للمثال التالي كود : Dim b1? As Boolean ففي هذا المثال تقيم b1 And b2 إلى Nothing وبالنتيجة يتم تنفيذ قسم Else في كلا تعبير If ويكون الخرج كما يلي Expression is not true Expression is not false لاحظ ان AndAlso و OrElse اللتين تستخدمان التقييم المختصر تقومان بتقييم معاملهما الثاني في حالة كون التعبير الأول قد تم تقييم قيمته إلى Nothing إن كان كلا أو أحد المعاملات في معادلة رياضية أو منطقية أو إزاحة nullable فستكون النتيجة أيضا nullable وإن كان لكلا المعاملين قيمة لا تساوي Nothing تتم العملية وفق قيم تلك المعاملات كما لو أنهما من نوع قيمة وليس nullable ففي المثال التالي المتغير compare1 والمتغير sum1 نوعان ضمنيان فإن أوقفت مشيرة الفأرة قليلا فوقهما ستلاحظ أن المترجم يشير إلى أن كلاهما من nullable type كود : 'Variable n is a nullable type, but both m and n have proper values. وإن كانت قيمة واحد أو أكثر من المعاملات Nothing فالنتيجة ستكون Nothing كود : ' Change the value of n to Nothing. |