Operador If (Visual Basic)
Usa a avaliação de curto-circuito para retornar condicionalmente um dos dois valores. O operador If
pode ser chamado com três argumentos ou com dois argumentos.
Sintaxe
If( [argument1,] argument2, argument3 )
Se o operador for chamado com três argumentos
Quando If
é chamado usando três argumentos, o primeiro argumento deve ser avaliado como um valor que pode ser convertido como um Boolean
. Esse valor Boolean
determinará qual dos outros dois argumentos é avaliado e retornado. A lista a seguir se aplica somente quando o operador If
é chamado usando três argumentos.
Partes
Termo | Definição |
---|---|
argument1 |
Obrigatórios. Boolean . Determina qual dos outros argumentos avaliar e retornar. |
argument2 |
Obrigatórios. Object . Avaliado e retornado se argument1 for avaliado como True . |
argument3 |
Obrigatórios. Object . Avaliado e retornado se argument1 for avaliado como False ou se argument1 for uma variável anulávelBoolean que é avaliada como Nothing. |
Um operador If
chamado com três argumentos funciona como uma função IIf
, exceto que ele usa a avaliação de curto-circuito. Uma função IIf
sempre avalia todos os três argumentos, enquanto um operador If
que tem três argumentos avalia apenas dois deles. O primeiro argumento If
é avaliado e o resultado é convertido como um valor Boolean
, True
ou False
. Se o valor for True
, argument2
será avaliado e o valor dele será retornado, mas argument3
não será avaliado. Se o valor da expressão Boolean
for False
, argument3
erá avaliado e o valor dele será retornado, mas argument2
não será avaliado. Os seguintes exemplos ilustram o uso de If
quando três argumentos são usados:
' 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"))
O exemplo a seguir ilustra o valor da avaliação de curto-circuito. O exemplo mostra duas tentativas de dividir a variável number
pela variável divisor
, exceto quando divisor
é zero. Nesse caso, um 0 deve ser retornado e nenhuma tentativa deve ser feita para executar a divisão porque isso resultaria em um erro em tempo de execução. Como a expressão If
usa a avaliação de curto-circuito, ela avalia o segundo ou o terceiro argumento, dependendo do valor do primeiro argumento. Se o primeiro argumento for verdadeiro, o divisor não será zero e será seguro avaliar o segundo argumento e executar a divisão. Se o primeiro argumento for falso, somente o terceiro argumento será avaliado e um 0 será retornado. Portanto, quando o divisor é 0, nenhuma tentativa é feita para executar a divisão e nenhum erro é gerado. No entanto, como IIf
não usa a avaliação de curto-circuito, o segundo argumento é avaliado mesmo quando o primeiro argumento é falso. Isso causa um erro de divisão por zero em tempo de execução.
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))
Se o operador for chamado com dois argumentos
O primeiro argumento para If
pode ser omitido. Isso permite que o operador seja chamado usando apenas dois argumentos. A lista a seguir se aplica somente quando o operador If
é chamado com dois argumentos.
Partes
Termo | Definição |
---|---|
argument2 |
Obrigatórios. Object . Precisa ser um tipo de valor de referência ou anulável. Avaliado e retornado quando ele é avaliado para qualquer outra coisa diferente de Nothing . |
argument3 |
Obrigatórios. Object . Avaliado e retornado se argument2 for avaliado como Nothing . |
Quando o argumento Boolean
é omitido, o primeiro argumento precisa ser um tipo de valor de referência ou anulável. Se o primeiro argumento for avaliado como Nothing
, o segundo argumento será avaliado e retornado. Em todos os outros casos, o valor do primeiro argumento é retornado. O exemplo a seguir ilustra como essa avaliação funciona:
' 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))