Operatore If (Visual Basic)
Viene utilizzata la valutazione short-circuit per restituire in modo condizionale uno tra due valori. L'operatore If può venire chiamato con due o tre argomenti.
If( [argument1,] argument2, argument3 )
Chiamare l'operatore If con tre argomenti
Quando If viene chiamato utilizzando tre argomenti, il primo argomento deve restituire un valore di cui può essere eseguito il cast come un Boolean. Tale valore Boolean determinerà quale degli altri due argomenti viene valutato e restituisce. L'elenco seguente è valido solo quando l'operatore If viene chiamato utilizzando tre argomenti.
Parti
Termine |
Definizione |
argument1 |
Obbligatorio. Boolean. Determina quale degli altri argomenti deve venire valutato e restituito. |
argument2 |
Obbligatorio. Object. Valutato e restituito se argument1 restituisce True. |
argument3 |
Obbligatorio. Object. Valutato e restituito se argument1 dà come risultato False o se argument1 è una variabile di nullableBoolean che restituisce Nothing. |
Un operatore If chiamato con tre argomenti opera come una funzione IIf con la differenza che utilizza la valutazione short-circuit. Una funzione IIf valuta sempre tutti i tre argomenti, mentre un operatore If che ha tre argomenti ne valuta solo due. Viene valutato il primo argomento If e viene eseguito il cast del risultato come un valore Boolean, True o False. Se il valore è True, viene valutato argument2 e il relativo valore viene restituito, ma argument3 non viene valutato. Se il valore dell'espressione Boolean è False, viene valutato argument3 e il relativo valore viene restituito, ma argument2 non viene valutato. Negli esempi seguenti viene illustrato l'utilizzo di If quando vengono utilizzati tre argomenti:
' 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"))
Nell'esempio seguente viene illustrato il valore della valutazione short-circuit. Nell'esempio vengono descritti due tentativi di dividere una variabile number per una variabile divisor tranne quando divisor è zero. In tal caso, deve essere restituito uno 0 e non si deve tentare di eseguire la divisione perché verrebbe generato un errore di runtime. Poiché l'espressione If utilizza la valutazione short-circuit, valuta il secondo o il terzo argomento, in funzione del valore del primo argomento. Se il primo argomento è true, il divisore non è zero e se è sicuro valutare il secondo argomento ed eseguire la divisione. Se il primo argomento è false, viene valutato solo il terzo argomento è viene restituito uno 0. Pertanto, quando il divisore è 0, non viene eseguita la divisione e non si verifica alcun errore. Tuttavia, poiché IIf non utilizza la valutazione short-circuit, il secondo argomento viene valutato anche quando il primo argomento è false. Questo provoca un errore di runtime divisione per zero.
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))
Chiamare l'operatore If con due argomenti
Il primo argomento da fornire a If può essere omesso. Questo consente di chiamare l'operatore utilizzando solo due argomenti. L'elenco seguente è valido solo quando l'operatore If viene chiamato utilizzando due argomenti.
Parti
Termine |
Definizione |
argument2 |
Obbligatorio. Object. Deve essere un tipo di riferimento o nullable. Valutato e restituito quando restituisce un valore qualsiasi diverso da Nothing. |
argument3 |
Obbligatorio. Object. Valutato e restituito se argument2 restituisce Nothing. |
Quando l'argomento Boolean viene omesso, il primo argomento deve essere un tipo di riferimento o nullable. Se il primo argomento restituisce Nothing, viene restituito il valore del secondo argomento. In tutti gli altri casi viene restituito il valore del primo argomento. Nell'esempio riportato di seguito viene illustrato come funziona questa valutazione.
' 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))