مشاريع
أقسام المقالات
Total Articles: 19
مؤتمرات وأحداث
مراكز وانجازات
.net 2008 Course
آخر 10 مواضيع
كتب وملخصات
Tips & Tricks
If Operator
الخميس، ٢٢ مايو ٢٠٠٨

في البداية أحب أن أنوه أن If Operator هنا مختلف عن الوظيفة IIf أو عبارة If … Then … Else المعتادة. فسابقا عندما كنا نستخدم IIF كان النوع المعاد من النوع Object مما يعني أنه لن يحصل تدقيق على النوع بالحالة الافتراضية كما لن يتوفر IntelliSense لتلك القيمة ولهؤلاء الذين يصرون على كتابة كود آمن خلال الأنواع ومن أجل الربط المبكر للكود كان يجب عليهم تحويل ذلك النوع إلى نوع البيانات المراد فقد يبدو لديهم الكود كما يلي



Dim intC As Integer = CInt(IIf(intA = intB, intA, intB - 1))


 


ولكن الآن وباستخدام المعامل If يمكننا إعادة كتابة نفس الكود والحصول على فوائد الربط المبكر وتدقيق النوع وتوفر intelliSense لتلك القيمة


Dim intD As Integer = If(intA = intB, intA, intB)


 


الصيغة العامة


            يوفر المعامل If  طريقة مختصرة لإعادة قيمة واحدة من قيمتين وفق شرط معين حيث يمكن استدعاؤه بتمرير ثلاثة وسائط له أو وسيطتين وتكون الصيغة العامة له


If( [argument1,] argument2, argument3 )


 


استدعاء If Operator بثلاثة وسائط


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


·         argumet1 ضرورية وقيمتها بوليانية وهي تحدد أية واحدة من الوسيطتين الأخريين سيتم تقييمها وإعادتها


·         argumet2 ضرورية وهي من النوع Object ويتم تقييمها وإعادتها في حال كون قيمة argument1 هي True


·         argument3 ضرورية وهي من النوع Object ويتم تقييمها وإعادتها في حال كون قيمة argument1 هي False


فعندما يتم استدعاء المعامل If بثلاثة وسائط يعمل بشكل مشابه للوظيفة IIf فيما عدا أنها تستخدم التقييم المختصر. فالوظيفة IIf تقيم دوما جميع الوسائط الثلاث بينما المعامل If يقوم بتقييم اثنين فقط من تلك الوسائط حيث يتم تقييم الوسيطة الأولى وتحويل نوعها إلى Boolean فإن كانت النتيجة True فسيتم تقييم argument2 ثم إعادة قيمتها ولكن لن يتم تقييم argument3 في هذه الحالة. وإن كانت قيمة الوسيطة الأولى False عندها لن يتم تقييم argument2 وسيتم تقييم argument3 وإعادة قيمتها ويوضح المثال التالي استخدام المعامل If بثلاثة وسائط


' This statement prints TruePart, because the first argument is true.


Console.WriteLine(If(True, "TruePart", "FalsePart"))


 


' This statement prints FalsePart, because the first argument is false.


Console.WriteLine(If(False, "TruePart", "FalsePart"))


 


Dim number = 3


' With number set to 3, this statement prints Positive.


Console.WriteLine(If(number >= 0, "Positive", "Negative"))


 


number = -1


' With number set to -1, this statement prints Negative.


Console.WriteLine(If(number >= 0, "Positive", "Negative"))


 


والمثال التالي يوضح قيمة التقييم المختصر مظهرا محاولتين لتقسيم متغير number على متغير divisor عدا أنه عندما تكون قيمة devisor مساوية للصفر يجب إعادة القيمة صفر ولا يجب محاولة القيام بعملية القسمة وإلا نتج عن ذلك خطأ وقت التنفيذ – خطأ القسمة على صفر - وبسبب أن المعامل If يستخدم التقييم المختصر فإنه يقيم إما الوسيطة الثانية أو الثالثة اعتمادا على قيمة الوسيطة الأولى فإن كانت للوسيطة الأولى القيمة True فيكون devisor لا يحمل القيمة صفر وبالتالي يكون آمنا تقييم الوسيطة الثانية وإجراء عملية القسمة وإن كانت قيمة الوسيطة الأولى False فسيتم تقييم الوسيطة الثالثة فقط وسيتم إعادة القيمة صفر ولهذا فعندما تكون قيمة devisor مساوية للصفر فلن يتم محاولة إجراء عملية القسمة وبالتالي لن يكون هناك خطأ في زمن التنفيذ وبما أن IIf لا تستخدم التقييم المختصر فسيتم تقييم الوسيطة الثانية دوما مهما كانت قيمة الوسيطة الأولى وبالتالي سينطلق خطأ القسمة على صفر وقت التنفيذ دوما


number = 12


 


' When the divisor is not 0, both If and IIf return 4.


Dim divisor = 3


Console.WriteLine(If(divisor <> 0, number \ divisor, 0))


Console.WriteLine(IIf(divisor <> 0, number \ divisor, 0))


 


' When the divisor is 0, IIf causes a runtime error, but If does not.


divisor = 0


Console.WriteLine(If(divisor <> 0, number \ divisor, 0))


' Console.WriteLine(IIf(divisor <> 0, number \ divisor, 0))


 


استدعاء If Operator بوسيطتين


            يمكن حذف الوسيطة الأولى مما يمكنك من استدعاء المعامل If بوسيطتين حيث تكونان كما يلي


·         argument2 ضرورية من النوع Object ويجب أن تكون من نوع يمكن أن يحمل القيمة Nothing أو نوع مرجعي Reference or nullable type حيث يتم تقييمه وإعادته عندما يحمل أي قيمة مغايرة لـ Nothing


·         argument3 ضرورية من النوع Object حيث يتم تقييمها وإعادة قيمتها في حالة كون قيمة argument2 مساوية لـ Nothing


فعندما يتم حذف الوسيطة البوليانية عندها يجب أن تكون الوسيطة الأولى من نوع يقبل أن يحمل القيمة Nothing أو نوع مرجعي reference or nullable type فإن تم تقييم الوسيطة الأولى إلى Nothing عندها يتم إعادة قيمة الوسيطة الثانية وفي جميع الحالات الأخرى يتم إعادة قيمة الوسيطة الأولى كما يظهر المثال التالي


' Variable first is a nullable type.


Dim first? As Integer = 3


Dim second As Integer = 6


 


' Variable first <> Nothing, so its value, 3, is returned.


Console.WriteLine(If(first, second))


 


second = Nothing


' Variable first <> Nothing, so the value of first is returned again.


Console.WriteLine(If(first, second))


 


first = Nothing


second = 6


' Variable first = Nothing, so 6 is returned.


Console.WriteLine(If(first, second))


 


 

تم التحرير بواسطة samerselo @ ٨:٣٧ م  
0 Comments:
إرسال تعليق
<< Home
 
الصفحة الرئيسية
Google Search
Google
       

كتاب المدونة
من نحن ؟
مجموعة من الكتاب باللغة العربية بلغة الدوت نت ، نلتقي هنا لكي نتشارك الخبرات والمعلومات حول الجديد في عالم الدوت نت
ارشيف المواضيغ والمقالات السابقة
VB.net <> C#

الفروقات بين سي شارب و في بي . نت
روابط ومواقع تقنية عربية
عداد الزيارات
Locations of visitors to this page
أشخاص شرفونا بزيارتهم
مركز التحميل
© 2005 DotNet4Arab Blogspot Template by Isnaini Dot Com