If (operador)

Actualización: noviembre 2007

Utiliza 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.

If( [argument1,] argument2, argument3 )

Operador "If" llamado con tres argumentos

Cuando se llama a If utilizando tres argumentos, el primer argumento se debe evaluar en un valor que se pueda convertir en Boolean. Ese valor Boolean determinará cuál de los otros dos argumentos se evalúa y devuelve. La lista siguiente sólo se aplica cuando se llama al operador If utilizando tres argumentos.

Partes

  • argument1
    Necesario. Boolean. Determina cuál de los otros argumentos se va a evaluar y devolver.

  • argument2
    Necesario. Object. Se evalúa y devuelve si argument1 se evalúa en True.

  • argument3
    Necesario. Object. Se evalúa y devuelve si argument1 se evalúa en False.

A un operador If al que se llama con tres argumentos funciona como función IIf salvo que utiliza la evaluación de cortocircuito. Una función IIf siempre evalúa sus tres argumentos, mientras que un operador If que tiene tres argumentos evalúa sólo dos de ellos. Se evalúa el primer argumento If y el resultado se convierte como valor de tipo Boolean, True o False. Si el valor es True, se evalúa argument2 y se devuelve su valor, pero no se evalúa argument3. Si el valor de la expresión Boolean es False, se evalúa argument2 y se devuelve su valor, pero no se evalúa argument3. Los ejemplos siguientes muestran el uso de If cuando se utilizan 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"))

El ejemplo siguiente muestra el valor de la evaluación de cortocircuito. El ejemplo muestra dos intentos de dividir la variable number por divisor salvo cuando divisor es cero. En ese caso, se debe devolver un 0 y no se debe realizar ningún intento para llevar a cabo la división porque se provocaría un error en tiempo de ejecución. Dado que la expresión If utiliza la evaluación de cortocircuito, evalúa el segundo o el tercer argumento, en función del valor del primer argumento. Si el valor del primer argumento es true, el divisor no es cero y es seguro evaluar el segundo argumento y realizar la división. Si el valor del primer argumento es false, sólo se evalúa el tercer argumento y se devuelve un 0. Por consiguiente, cuando el divisor es 0, no se realiza ningún intento para llevar a cabo la división y no se produce ningún error. Sin embargo, puesto que IIf no utiliza la evaluación de cortocircuito, se evalúa el segundo argumento aunque el valor del primer argumento sea false y se produce 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 runtime 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 pasar por alto el primer argumento a If. De esta forma, se puede llamar al operador utilizando sólo dos argumentos. La lista siguiente sólo se aplica cuando se llama al operador If con dos argumentos.

Partes

  • argument2
    Necesario. Object. Debe ser una referencia o un tipo que acepte valores NULL. Se evalúa y devuelve cuando se evalúa en algo distinto de Nothing.

  • argument3
    Necesario. Object. Se evalúa y devuelve si argument2 se evalúa en Nothing.

Cuando se omite el argumento Boolean, el primer argumento debe ser una referencia o un tipo que acepte valores NULL. Si el primer argumento se evalúa en Nothing, se devuelve el valor del segundo argumento. En el resto de los casos, se devuelve el valor del primer argumento. El ejemplo siguiente 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))

Vea también

Conceptos

Tipos de valor que aceptan valores NULL

Referencia

Nothing (Visual Basic)

IIf (Función)