exponenta event banner

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

|

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

Описание

пример

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) вычисляется как false, MATLAB ® предполагает, что все выражение должно быть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', оператор body выполняет и назначает S.Format стоимость '.png'.

Подробнее

свернуть все

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

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

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

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

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

Примечание

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

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