Operatore AndAlso (Visual Basic)

Esegue una congiunzione logica di corto circuito di due espressioni.

Sintassi

result = expression1 AndAlso expression2  

Parti

Termine Definizione
result Obbligatorio. Qualsiasi espressione Boolean . Il risultato è Boolean del confronto delle due espressioni.
expression1 Obbligatorio. Qualsiasi espressione Boolean .
expression2 Obbligatorio. Qualsiasi espressione Boolean .

Osservazioni:

Un'operazione logica viene detta in corto circuito se il codice compilato può ignorare la valutazione di un'espressione a seconda del risultato di un'altra espressione. Se il risultato della prima espressione valutata determina il risultato finale dell'operazione, non è necessario valutare la seconda espressione, perché non può modificare il risultato finale. Il corto circuito può migliorare le prestazioni se l'espressione ignorata è complessa o se comporta chiamate di routine.

Se entrambe le espressioni restituiscono True, result è True. Nella tabella seguente viene illustrato come result viene determinato.

Se expression1 è E expression2 è Il valore di result è
True True True
True False False
False (non valutato) False

Nota

In un confronto booleano, l'operatore And valuta sempre entrambe le espressioni, che possono includere l'esecuzione di chiamate di routine. L'operatore AndAlso esegue il corto circuito, il che significa che se expression1 è False, expression2 non viene valutato.

Tipi di dati

L'operatore AndAlso è definito solo per il tipo di dati booleano. Visual Basic converte ogni operando in Boolean in base alle esigenze prima di valutare l'espressione. Se si assegna il risultato a un tipo numerico, Visual Basic lo converte da Boolean a tale tipo in modo che False diventi 0 e True diventi -1. Per altre informazioni, vedere Conversioni di tipi booleani.

Overload

L'operatore And e l'operatore IsFalse possono essere sottoposti a overload, il che significa che una classe o una struttura può ridefinirne il comportamento quando un operando ha il tipo di tale classe o struttura. L'overload degli operatori And e IsFalse influisce sul comportamento dell'operatore AndAlso. Se il codice usa AndAlso su una classe o una struttura che esegue l'overload di And e IsFalse, assicurarsi di comprenderne il comportamento ridefinito. Per altre informazioni, vedere Operator Procedures.

Esempio 1

Nell'esempio seguente viene usato l'operatore AndAlso per eseguire una congiunzione logica su due espressioni. Il risultato è un valore Boolean che indica se l'intera espressione congiunta è true. Se la prima espressione è False, la seconda non viene 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

L'esempio precedente produce rispettivamente i risultati di True, False e False. Nel calcolo di secondCheck, la seconda espressione non viene valutata perché la prima è già False. Tuttavia, la seconda espressione viene valutata nel calcolo di thirdCheck.

Esempio 2

Nell'esempio seguente viene illustrata una routine Function che cerca un determinato valore tra gli elementi di una matrice. Se la matrice è vuota o se la lunghezza della matrice è stata superata, 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

Vedi anche