ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

論理演算子: ショートサーキット && ||

ショートサーキットを使用した論理演算

構文

  • expr1 && expr2
  • expr1 || expr2

説明

expr1 && expr2 は、ショートサーキットの動作を使用した論理 AND 演算を表します。つまり、expr1 が論理値 0 (false) の場合、expr2 は評価されません。それぞれの式は、スカラーの論理値の結果に評価されなければなりません。

expr1 || expr2 は、ショートサーキットの動作を使用した論理 OR 演算を表します。つまり、expr1 が論理値 1 (true) の場合、expr2 は評価されません。それぞれの式は、スカラーの論理値の結果に評価されなければなりません。

すべて折りたたむ

2 つのベクトルを作成します。

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

XY にショートサーキット OR 演算子を使用すると、エラーが返されます。ショートサーキット演算子は、スカラーの論理条件でのみ演算を行います。

関数 any および all を使用して、それぞれのベクトルを単一の論理条件に縮小します。

any(X) || any(Y)
ans =

     1

この式は 1 OR 0 と等価であるため、最初の条件 any(X) のみを計算した後、論理値 1 (true) に評価されます。

2 番目の条件が 1 番目の条件に依存する論理ステートメントを指定します。次のステートメントでは、除数 b がゼロの場合、右辺の関係を評価しても意味がありません。

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

     1

結果は論理値 1 (true) です。ただし、(b ~= 0)false と評価される場合、MATLAB® では式全体が false であると仮定され、その式の評価が早期に終了します。

b = 0 を指定して、同じ式を評価します。

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

     0

結果は論理値 0 (false) です。最初のステートメントが論理値 0 (false) と評価されるため、式はショートサーキットされます。

'File' および 'Format' という名前のフィールドをもつ構造体を作成します。

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

      File: 'myGraph'
    Format: []

複数の条件が true になる場合、if ステートメントにショートサーキットの式を使用すると便利です。1 番目の式が true である場合にのみ 2 番目の式を評価することが意味をなすというように、相互の条件を構築できます。

S'Format' という名前の空のフィールドが含まれる場合にのみ実行する if ステートメントを指定します。

if isfield(S,'Format') && isempty(S.Format)
  S.Format = '.png';
end
S
S = 

      File: 'myGraph'
    Format: '.png'

最初の条件は、文字列 'Format' が構造体 S のフィールドの名前かどうかをテストしています。2 番目のステートメントは、Format フィールドが空かどうかをテストしています。2 番目の条件の真偽は 1 番目の条件に依存しています。1 番目の条件が true にならないと 2 番目の条件が true になることはありません。S には 'Format' という名前の空のフィールドがあるため、本体のステートメントが実行され、S.Format に値 '.png' が代入されます。

詳細

すべて折りたたむ

論理ショートサーキット

論理ショートサーキットを使用すると、2 番目のオペランド expr2 は、最初のオペランド expr1 によって結果が完全に判定できない場合にのみ評価されます。

論理 AND および論理 OR の特性により、論理式の結果はすべての条件が評価される前に完全に判定されることがあります。論理 and 演算子は、式の中の条件が 1 つでも false であれば論理値 0 (false) を返します。論理 or 演算子は、式の中の条件が 1 つでも true であれば論理値 1 (true) を返します。これらの値が 1 つ検出されることで論理式の評価が完了する場合、式に "ショートサーキットがある" といいます。

たとえば、式 A && B において、条件 A が false であると MATLAB® は条件 B をまったく評価しません。A が false の場合、B の値により演算の結果が変わることはありません。

if または while ループ式のコンテキスト内で "のみ" 要素単位の & および | 演算子を使用する場合、式の評価にショートサーキットが使用されます。

    メモ:   ショートサーキットの評価を有効にする場合は、必ず && 演算子と || 演算子を使用してください。ショートサーキットに & および | 演算子を使用すると、式の評価結果が論理スカラーにならない場合、予期しない結果が生じる可能性があります。

参考

| | | | | | | |

この情報は役に立ちましたか?