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