Оператор AndAlso (Visual Basic)
Выполняет упрощенную операцию логического умножения над двумя выражениями.
result = expression1 AndAlso expression2
Части
Термин |
Определение |
result |
Обязательный. Любое выражение типа Boolean. При сравнении двух выражений будет получен результат типа Boolean. |
expression1 |
Обязательный. Любое выражение типа Boolean. |
expression2 |
Обязательный. Любое выражение типа Boolean. |
Заметки
Логическая операция называется сокращенной, если компилируемый код может пропустить оценку одного выражения, зависящего от результата другого выражения. Если результат первого оцененного выражения определяет конечный результат операции, то отсутствует необходимость оценивать второе выражение, так как это не повлияет на конечный результат. Сокращенное вычисление улучшает производительность, если пропущенное выражение является сложным или содержит вызовы процедур.
Если оба выражения определяются значением True, то результат result имеет значение True. В следующей таблице показан порядок определения результата result.
Если выражение expression1 имеет значение |
И выражение expression2 имеет значение |
Значение result будет следующим |
True |
True |
True |
True |
False |
False |
False |
(не вычисляется) |
False |
Использование оператора AndAlso предназначено для проверки существования экземпляра объекта перед попыткой получения доступа к одному из его членов. Это показано в следующей строке кода.
If newObject AndAlso newObject.initFinished Then
Доступ к свойству initFinished в предыдущей строке кода может вызвать исключение NullReferenceException, если переменная newObject не имела назначенный ей экземпляр объекта. Однако использование оператора AndAlso приводит к тому, что компилятор обходит доступ к свойству initFinished, если переменная newObject равна Nothing, поскольку Nothing определяется как False.
Типы данных
Оператор AndAlso определен только для типа данных Boolean (Тип данных Boolean (Visual Basic)). В Visual Basic каждый операнд при необходимости преобразуется в тип Boolean, после чего операция полностью выполняется с использованием типа Boolean. Если результату назначить числовой тип, Visual Basic преобразует его из типа Boolean в этот тип. Это может привести к непредвиденному поведению. Например, результат операции 5 AndAlso 12 равен –1, если преобразуется в тип Integer.
Перегрузка
Оператор Оператор And (Visual Basic) и Оператор IsFalse (Visual Basic) может быть перегруженным. Это означает, что класс или структура может переопределить его поведение, если операнд имеет тип класса или структуры. Перегрузка операторовAnd и IsFalse влияет на поведение оператора AndAlso. Если в коде используется оператор AndAlso для класса или структуры, которая перегружает And и IsFalse, убедитесь, что вы понимаете его переопределенное поведение. Дополнительные сведения см. в разделе Процедуры операторов (Visual Basic).
Пример
В данном примере оператор AndAlso используется для выполнения логического умножения двух выражений. Результат представляет собой значение Boolean, которое показывает, что объединенное выражение истинно. Если первое выражение является False, второе выражение не оценивается.
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
В предыдущем примере получаются результаты True, False и False, соответственно. При вычислении secondCheck второе выражение не вычисляется, поскольку первое значение уже равно False. Тем не менее, второе выражение определяется при вычислении thirdCheck.
В следующем примере процедура Function выполняет поиск заданного значения среди элементов массива. Если массив пуст или превышена длина массива, оператор While не проверяет элементы массива на значение поиска.
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
См. также
Ссылки
Логические (побитовые) операторы (Visual Basic)
Порядок применения операторов в Visual Basic
Список операторов, сгруппированных по функциональному назначению (Visual Basic)
Оператор IsFalse (Visual Basic)