If (Operador) (Visual Basic)

Usa la evaluación de cortocircuito para devolver condicionalmente uno de dos valores. Se puede llamar al operador If con tres argumentos o con dos argumentos.

Sintaxis

If( [argument1,] argument2, argument3 )

Operador If llamado con tres argumentos

Cuando If se llama mediante tres argumentos, el primer argumento debe evaluarse como un valor que se puede transmitir como Boolean. Ese valor Boolean determinará cuál de los otros dos argumentos se evalúa y devuelve. La lista siguiente solo se aplica cuando se llama al operador If mediante tres argumentos.

Partes

Término Definición
argument1 Obligatorio. Boolean. Determina cuáles de los demás argumentos se van a evaluar y devolver.
argument2 Obligatorio. Object. Se evalúa y se devuelve si argument1 se evalúa como True.
argument3 Obligatorio. Object. Se evalúa y se devuelve si argument1 se evalúa como False o si argument1 es una variable que admite valores NULLBoolean que se evalúa como Nothing.

Un operador If al que se llama con tres argumentos funciona como una función IIf, salvo que usa la evaluación de cortocircuito. Una función IIf siempre evalúa los tres argumentos, mientras que un operador If que tiene tres argumentos solo evalúa dos de ellos. El primer argumento If se evalúa y el resultado se convierte como un valor Boolean, True o False. Si el valor es True, argument2 se evalúa y se devuelve su valor, pero argument3 no se evalúa. Si el valor de la expresión Boolean es False, argument3 se evalúa y se devuelve su valor, pero argument2 no se evalúa. En los ejemplos siguientes se muestra el uso de If cuando se usan tres argumentos:

' 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"))

En el ejemplo siguiente se muestra el valor de evaluación de cortocircuito. En el ejemplo se muestran dos intentos de dividir la variable number por la variable divisor, excepto cuando divisor es cero. En ese caso, se debe devolver un 0 y no se debe intentar realizar la división porque se produciría un error en tiempo de ejecución. Dado que la expresión If usa la evaluación de cortocircuito, evalúa el segundo o el tercer argumento, según el valor del primer argumento. Si el primer argumento es True, el divisor no es cero y es seguro evaluar el segundo argumento y realizar la división. Si el primer argumento es False, solo se evalúa el tercer argumento y se devuelve 0. Por lo tanto, cuando el divisor es 0, no se intenta realizar la división y no se produce ningún error. Sin embargo, dado que IIf no usa la evaluación de cortocircuito, el segundo argumento se evalúa incluso cuando el primer argumento es False. Esto provoca un error de división por cero en tiempo de ejecución.

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))

Operador If llamado con dos argumentos

Se puede omitir el primer argumento a If. Esto permite llamar al operador mediante solo dos argumentos. La lista siguiente solo se aplica cuando se llama al operador If mediante dos argumentos.

Partes

Término Definición
argument2 Obligatorio. Object. Debe ser un tipo de valor que admite valores NULL o de referencia. Se evalúa y se devuelve cuando se evalúa como algo distinto de Nothing.
argument3 Obligatorio. Object. Se evalúa y se devuelve si argument2 se evalúa como Nothing.

Cuando se omite el argumento Boolean, el primer argumento debe ser una referencia o un tipo de valor que admite valores NULL. Si el primer argumento se evalúa como Nothing, se devuelve el valor del segundo argumento. En todos los demás casos, se devuelve el valor del primer argumento. En el ejemplo siguiente se muestra cómo funciona esta evaluación:

' 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))

Consulte también