Logical Operators: Short-Circuit && ||

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

Описание

пример

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

пример

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) оценивает к false, MATLAB® принимает целое выражение, чтобы быть false и отключает его оценку выражения рано.

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

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

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

Создайте структуру с полями под названием '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', оператор body выполняет и присваивает S.Format значение '.png'.

Больше о

свернуть все

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

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

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

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

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

Примечание

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

Расширенные возможности

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