Logical Operators: Short-Circuit && ||

Логические операции с коротким замыканием

Описание

пример

expr1 && expr2 представляет логическую AND операция, которая использует поведение короткого замыкания. То есть expr2 не оценивается, если expr1 является логическим 0 (false). Каждое выражение должно вычисляться скалярным логическим результатом.

пример

expr1 || expr2 представляет логическую OR операция, которая использует поведение короткого замыкания. То есть expr2 не оценивается, если expr1 является логическим 1 (true). Каждое выражение должно вычисляться скалярным логическим результатом.

Примеры

свернуть все

Создайте два вектора.

X = [1 0 0 1 1];
Y = [0 0 0 0 0];

Использование оператора короткая схема с X и Y возвращает ошибку. Операторы короткой схемы работают только со скаляром логическими условиями.

Используйте any и all функции для преобразования каждого вектора в одно логическое условие.

any(X) || all(Y)
ans = logical
   1

Выражение эквивалентно 1 OR 0, поэтому он оценивается в логическую 1 (true) после вычисления только первого условия, any(X).

Задайте логический оператор, где второе условие зависит от первого. В следующем операторе не имеет смысла оценивать отношение справа, если делитель, b, равен нулю.

b = 1;
a = 20;
x = (b ~= 0) && (a/b > 18.5)
x = logical
   1

Результат логичен 1 (true). Однако, если (b ~= 0) вычисляет, чтобы falseMATLAB ® принимает, чтобы все выражение было false и прекращает свою оценку выражения раньше.

Задайте b = 0 и вычислите то же выражение.

b = 0;
x = (b ~= 0) && (a/b > 18.5)
x = logical
   0

Результат логичен 0 (false). Первый оператор вычисляется как логический 0 (false), поэтому выражение коротко замыкается.

Создайте структуру с именованными полями 'File' и 'Format'.

S = struct('File',{'myGraph'},'Format',[])
S = struct with fields:
      File: 'myGraph'
    Format: []

Выражения короткой схемы полезны в if операторы, когда необходимо, чтобы несколько условий были истинными. Условия могут основываться друг на друге таким образом, что имеет смысл только вычислить второе выражение, если первое выражение верно.

Задайте if оператор, который выполняется только тогда, когда S содержит пустое поле с именем 'Format'.

if isfield(S,'Format') && isempty(S.Format)
  S.Format = '.png';
end 
S
S = struct with fields:
      File: 'myGraph'
    Format: '.png'

Первое условие проверяется, если 'Format' - имя поля в структуре S. Затем второй оператор проверяет, Format ли поле пустое. Истина второго условия зависит от первого. Второе условие никогда не может быть верным, если первое условие не верно. Начиная с S имеет пустое поле с именем 'Format'оператор тела выполняет и присваивает S.Format значение '.png'.

Подробнее о

свернуть все

Логическое короткое замыкание

С логическим коротким замыканием второй операнд, expr2, оценивается только, когда результат не полностью определяется первым операндом expr1.

Из-за свойств логических AND и OR, результат логического выражения иногда полностью определяется перед оценкой всех условий. Логический and оператор возвращает логическое 0 (false) если даже одно условие в выражении ложно. Логический or оператор возвращает логическое 1 (true) если даже одно условие в выражении true. Когда оценка логического выражения заканчивается раньше, встречая одно из этих значений, выражение, как говорят, было коротко замкнуто.

Для примера в выражении A && B, MATLAB® не оценивает условие B вообще, если условие A является ложным. Если A false, тогда значение B не изменяет результат операции.

Когда вы используете поэлементно & и | операторы в контексте if или while выражение цикла (и только в этом контексте), они используют короткое замыкание для вычисления выражений.

Примечание

Всегда используйте && и || операторы, чтобы включить оценку короткой схемы. Использование & и | операторы для короткого замыкания могут привести к неожиданным результатам, когда выражения не вычисляются логическими скалярами.

Представлено до R2006a