Operatore AndAlso
Aggiornamento: novembre 2007
Esegue una congiunzione logica di corto circuito tra due espressioni.
result = expression1 AndAlso expression2
Parti
result
Obbligatoria. Qualsiasi espressione Boolean. Il risultato è il valore Boolean ottenuto dal confronto tra le due espressioni.expression1
Obbligatoria. Qualsiasi espressione Boolean.expression2
Obbligatoria. Qualsiasi espressione Boolean.
Note
Un'operazione logica viene definita di corto circuito se il codice compilato può evitare la valutazione di un'espressione sulla base del risultato di un'altra espressione. Se il risultato della prima espressione valutata determina il risultato finale dell'operazione, non sarà necessario valutare la seconda espressione, in quanto non potrà modificare il risultato finale. Il meccanismo di corto circuito può migliorare le prestazioni se l'espressione ignorata è complessa o se prevede anche chiamate di routine.
Se entrambe le espressioni restituiscono True, anche result sarà True. Nella tabella riportata di seguito viene illustrato come si determina il valore di result.
Se expression1 è |
Ed expression2 è |
Il valore di result sarà |
---|---|---|
True |
True |
True |
True |
False |
False |
False |
(non valutato) |
False |
L'operatore AndAlso può essere utilizzato, tra l'altro, per verificare l'esistenza di un'istanza di oggetto prima di tentare di accedere a uno dei relativi membri. Nella riga di codice riportata di seguito viene illustrata questa situazione.
If newObject AndAlso newObject.initFinished Then
L'accesso alla proprietà initFinished nella riga di codice precedente può generare un'eccezione NullReferenceException se alla variabile newObject non è stata assegnata un'istanza di oggetto. L'operatore AndAlso, tuttavia, fa sì che il compilatore ignori l'accesso a initFinished se newObject è Nothing, in quanto Nothing restituisce False.
Tipi di dati
L'operatore AndAlso è definito solo per il Tipo di dati Boolean (Visual Basic). Ciascun operando viene convertito, se necessario, in Boolean e l'operazione viene eseguita interamente in Boolean. Se si assegna il risultato a un tipo numerico, tale risultato viene convertito da Boolean nel tipo specificato. Questa operazione può determinare un comportamento imprevisto. Ad esempio, il risultato di 5 AndAlso 12 è –1 se viene eseguita la conversione in Integer.
Overload
L'Operatore And (Visual Basic) e l'Operatore IsFalse possono essere sottoposti a overload. In altri termini, una classe o una struttura può ridefinirne il comportamento quando un operando specifica il tipo di tale classe o struttura. L'esecuzione dell'overload degli operatori And e IsFalse ha effetto sul comportamento dell'operatore AndAlso. Se il codice utilizza AndAlso su una classe o una struttura che esegue l'overload di And e IsFalse, è importante comprendere il comportamento ridefinito da tali operatori. Per ulteriori informazioni, vedere Routine di operatore.
Esempio
Nell'esempio riportato di seguito l'operatore AndAlso viene utilizzato per eseguire una congiunzione logica tra due espressioni. Il risultato è un valore Boolean che indica se l'intera espressione di congiunzione è True. Se la prima espressione è False, la seconda non verrà valutata.
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b AndAlso b > c
secondCheck = b > a AndAlso b > c
thirdCheck = a > b AndAlso c > b
I risultati ottenuti dall'esempio precedente sono rispettivamente True, False e False. Nel calcolo di secondCheck la seconda espressione non viene valutata perché la prima è già False. La seconda espressione, tuttavia, viene valutata nel calcolo di thirdCheck.
Nell'esempio riportato di seguito viene illustrata una routine Function che esegue la ricerca di un determinato valore tra gli elementi di una matrice. Se la matrice è vuota o se ne è stata superata la lunghezza, l'istruzione While non testa l'elemento della matrice rispetto al valore di ricerca.
Public Function findValue(ByVal arr() As Double, _
ByVal searchValue As Double) As Double
Dim i As Integer = 0
While i <= UBound(arr) AndAlso arr(i) <> searchValue
' If i is greater than UBound(arr), searchValue is not checked.
i += 1
End While
If i > UBound(arr) Then i = -1
Return i
End Function
Vedere anche
Concetti
Operatori logici e bit per bit in Visual Basic
Riferimenti
Precedenza tra gli operatori in Visual Basic