عامل تشغيل If

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

If( [argument1,] argument2, argument3 )

عامل التشغيل If يستدعى مع ثلاث وسيطات

عندما يتم استدعاء If باستخدام ثلاث وسائط، الوسيطة الأولى يجب أن تقييم إلى قيمة يمكن تحويلها إلى Boolean. قيمة Boolean تلك ستحدد أي من الوسيطتين سيتم تقيمها و إرجاعها. القائمة التالية تطبق فقط عندما يستدعى عامل تشغيل If باستخدام ثلاث وسائط.

الأجزاء

  • argument1
    مطلوبة. Boolean. تحدد أي من الوسيطات الأخرى لتقييمها وإرجاعها.

  • argument2
    مطلوبة. Object. يتم تقيمه و يتم إرجاعه إذا تم تقييم argument1 إلى True.

  • argument3
    مطلوبة. Object. يتم تقيمه و يتم إرجاعه إذا تم تقييم argument1 إلى False.

عامل التشغيل If الذي يتم استدعائه مع ثلاث وسائط يعمل مثل دالة IIf ما عدا التي تستخدم تقييم الدائرة القصيرة. دالة IIf تقييم دوماً كل الوسيطات الثلاثة الخاصة بها، بينما عامل تشغيل If الذي يحتوي على ثلاث وسائط يقيم اثنين منها. وسيطة If الأولى تم تقييمها ويتم تحويل النتيجة كقيمة Boolean، True أو False. إذا كانت القيمة True, argument2 يتم تقييمه و يتم إرجاع قيمته, ولكن لايتم تقييم argument3. إذا كانت قيمة تعبير Boolean هي False، argument3 يتم تقييمه و يتم إرجاع قيمته, لكن لايتم تقييم argument2. توضح الأمثلة التالية استخدام 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 باستثناء عندما يكون divisor صفر. في هذه الحالة، يجب إرجاع 0، ولا يجب إجراء أية محاولات لتنفيذ القسمة لأنه سينتج خطأ في وقت التشغيل. لأن تعبير If يستخدم تقييم الدائرة القصيرة، هو يقيم الوسيطة الثانية أو الثالثة فقط، استناداً إلى قيمة الوسيطة الأولى. إذا كانت الوسيطة الأولى صحيحه، المقسوم عليه ليس صفر و من الأمن تقييم الوسيطة الثانية وتنفيذ القسمة. إذا كانت الوسيطة الأولى خطأ، فقط يتم تقييم الوسيطة الثالثة و يتم إرجاع 0. لذلك، عندما يكون المقسوم عليه هو 0, لا يتم إجراء أية محاولة لتنفيذ القسمة لا ينتج أي خطأ. على الرغم من ذلك، لأن 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 run-time error, but If does not.
divisor = 0
Console.WriteLine(If(divisor <> 0, number \ divisor, 0))
' Console.WriteLine(IIf(divisor <> 0, number \ divisor, 0))

عامل التشغيل If يستدعى مع وسيطتين.

أول وسيطة لIf يمكن أن يتم حذفها. هذا يمكّن عامل التشغيل ليتم استدعائه باستخدام وسيطتين فقط. القائمة التالية تنطبق فقط عندما يتم استدعاء عامل التشغيل If مع وسيطتين.

الأجزاء

  • argument2
    مطلوبة. Object. يجب أن يكون مرجعاً أو نوع يقبل بيانات فارغة. يتم تقييمه و إرجاعه عندما يتم تقييمه لأي شيء أخر ليس Nothing.

  • argument3
    مطلوبة. Object. يتم تقيمه و يتم إرجاعه إذا تم تقييم argument2 إلى Nothing.

عند حذف وسيطة Boolean، يجب أن تكون الوسيطة الأولى مرجع أو نوع يقبل بيانات فارغة. إذا كانت الوسيطة الأولى يتم تقييمها إلى 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))

راجع أيضًا:

المرجع

لا شيء (Visual Basic)

IIf

المبادئ

أنواع قيمة يقبل القيم الخالية