論理演算子: ショートサーキット && ||
ショートサーキットを使用した論理演算
説明
expr1 && expr2
は、ショートサーキットの動作を使用した論理 AND
演算を表します。つまり、expr1
が logical 0
(false
) の場合、expr2
は評価されません。それぞれの式は、スカラー logical の結果に評価されなければなりません。
expr1 || expr2
は、ショートサーキットの動作を使用した論理 OR
演算を表します。つまり、expr1
が logical 1
(true
) の場合、expr2
は評価されません。それぞれの式は、スカラー logical の結果に評価されなければなりません。
例
スカラーの論理条件の使用
2 つのベクトルを作成します。
X = [1 0 0 1 1]; Y = [0 0 0 0 0];
X
と Y
にショートサーキット OR 演算子を使用すると、エラーが返されます。ショートサーキット演算子は、スカラーの論理条件でのみ演算を行います。
関数 any
および all
を使用して、それぞれのベクトルを単一の論理条件に縮小します。
any(X) || all(Y)
ans = logical
1
この式は 1 OR 0
と等価であるため、最初の条件 any(X)
のみを計算した後、logical 1
(true
) に評価されます。
従属的な論理条件の指定
2 番目の条件が 1 番目の条件に依存する論理ステートメントを指定します。次のステートメントでは、除数 b
がゼロの場合、右辺の関係を評価しても意味がありません。
b = 1; a = 20; x = (b ~= 0) && (a/b > 18.5)
x = logical
1
結果は logical 1
(true
) です。ただし、(b ~= 0)
が false
と評価される場合、MATLAB® では式全体が false
であると仮定され、その式の評価が早期に終了します。
b = 0
を指定して、同じ式を評価します。
b = 0; x = (b ~= 0) && (a/b > 18.5)
x = logical
0
結果は logical 0
(false
) です。最初のステートメントが logical 0
(false
) と評価されるため、式はショートサーキットされます。
構造体のフィールド値の変更
'File'
および 'Format'
という名前のフィールドをもつ構造体を作成します。
S = struct('File',{'myGraph'},'Format',[])
S = struct with fields:
File: 'myGraph'
Format: []
複数の条件が true にならなければならない場合、if
ステートメントにショートサーキットの式を使用すると便利です。1 番目の式が true である場合にのみ 2 番目の式を評価することが意味をなすというように、相互の条件を構築できます。
S
に 'Format'
という名前の空のフィールドが含まれる場合にのみ実行する if
ステートメントを指定します。
if isfield(S,'Format') && isempty(S.Format) S.Format = '.png'; end S
S = struct with fields:
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 であれば logical 0
(false
) を返します。論理 or
演算子は、式の中の条件が 1 つでも true であれば logical 1
(true
) を返します。これらの値が 1 つ検出されることで論理式の評価が完了する場合、式に "ショートサーキットがある" といいます。
たとえば、式 A && B
において、条件 A
が false であると MATLAB® は条件 B
をまったく評価しません。A
が false の場合、B
の値により演算の結果が変わることはありません。
if
または while
ループ式のコンテキスト内で "のみ" 要素単位の &
および |
演算子を使用する場合、式の評価にショートサーキットが使用されます。
メモ
ショートサーキットの評価を有効にする場合は、必ず &&
演算子と ||
演算子を使用してください。ショートサーキットに &
および |
演算子を使用すると、式の評価結果が論理スカラーにならない場合、予期しない結果が生じる可能性があります。
拡張機能
スレッドベースの環境
MATLAB® backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ のThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、Run MATLAB Functions in Thread-Based Environmentを参照してください。
バージョン履歴
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)