MATLAB Language
条件
サーチ…
構文
- 表現 ... END IF
- 表現 ... ELSE ... END IF
- if expression ... elseif expression ... end
- if expression ... elseif expression ... else ... end
パラメーター
パラメータ | 説明 |
---|---|
表現 | 論理的な意味を持つ式 |
IF条件
条件はコードのほぼすべての部分の基本的な部分です。これらは、ある状況でのみコードの一部を実行するために使用されますが、他の状況では実行されません。基本的な構文を見てみましょう:
a = 5;
if a > 10 % this condition is not fulfilled, so nothing will happen
disp('OK')
end
if a < 10 % this condition is fulfilled, so the statements between the if...end are executed
disp('Not OK')
end
出力:
Not OK
この例では、 if
が2つの部分で構成されていることがわかります。条件と、条件がtrueの場合に実行するコードです。コードは、条件の後と前に書かれたすべてのものであるend
というのif
。最初の条件が満たされなかったため、その中のコードは実行されませんでした。
もう一つの例があります:
a = 5;
if a ~= a+1 % "~=" means "not equal to"
disp('It''s true!') % we use two apostrophes to tell MATLAB that the ' is part of the string
end
上記の条件は常に真であり、出力を表示しますIt's true!
。
また次のように書くこともできます:
a = 5;
if a == a+1 % "==" means "is equal to", it is NOT the assignment ("=") operator
disp('Equal')
end
今回は条件が常にfalseであるため、出力Equal
は決して得られません。
しかし、常に真偽である条件についてはあまり使用されません。なぜなら、それらが常に偽であれば、コードのこの部分を単に削除することができ、それらが常に真である場合、条件は必要ないからです。
IF-ELSE状態
条件がfalseの場合は代替コードを実行したい場合があります。これは、オプションのelse
部分を使用するためです。
a = 20;
if a < 10
disp('a smaller than 10')
else
disp('a bigger than 10')
end
ここでは、 a
がelse
実行後にコードの2番目の部分で10
より小さくないため、出力a bigger than 10
ことがわかります。もう一度試してみましょう:
a = 10;
if a > 10
disp('a bigger than 10')
else
disp('a smaller than 10')
end
この例では、 a
が実際には10より小さいかどうかをチェックしていないことを示しています。条件がそのまま式をチェックするだけなので間違ったメッセージが表示され、true以外の場合( a = 10
)実行される第2の部分。
このタイプのエラーは、初心者でも経験豊富なプログラマにとっても非常に一般的な落とし穴です。特に状況が複雑になるときは、常に留意してください
IF-ELSEIF条件
else
を使うelse
、条件が満たされないときに何らかのタスクを実行できます。しかし、最初のものが偽である場合に、2番目の条件をチェックしたい場合はどうでしょうか?私たちはこのようにすることができます:
a = 9;
if mod(a,2)==0 % MOD - modulo operation, return the remainder after division of 'a' by 2
disp('a is even')
else
if mod(a,3)==0
disp('3 is a divisor of a')
end
end
OUTPUT:
3 is a divisor of a
これは"ネストされた条件"とも呼ばれますが、ここではコードの可読性を向上させ、エラーの可能性を減らすための特別なケースがあります。
a = 9;
if mod(a,2)==0
disp('a is even')
elseif mod(a,3)==0
disp('3 is a divisor of a')
end
OUTPUT:
3 is a divisor of a
elseif
を使用して、同じ条件ブロック内の別の式をチェックすることができます。これは1回の試行に限定されません。
a = 25;
if mod(a,2)==0
disp('a is even')
elseif mod(a,3)==0
disp('3 is a divisor of a')
elseif mod(a,5)==0
disp('5 is a divisor of a')
end
OUTPUT:
5 is a divisor of a
行の中でelseif
を使用することを選択するときは、 if
からend
までのすべてのブロックから1つだけが実行されるので、特別な注意が必要です。だから、私たちの例ではa
(明示的にチェックしたものから) a
すべての除数を表示したい場合、上記の例はうまくいかないでしょう:
a = 15;
if mod(a,2)==0
disp('a is even')
elseif mod(a,3)==0
disp('3 is a divisor of a')
elseif mod(a,5)==0
disp('5 is a divisor of a')
end
OUTPUT:
3 is a divisor of a
3だけでなく5も15の約数ですが、5で除算をチェックする部分は、それ以上の式が真であれば到達しません。
最後に、上記のいずれの条件も満たされていないときにelseif
条件の後にコードを実行するために、 elseif
条件の後ろに1つだけを追加することができelse
。
a = 11;
if mod(a,2)==0
disp('a is even')
elseif mod(a,3)==0
disp('3 is a divisor of a')
elseif mod(a,5)==0
disp('5 is a divisor of a')
else
disp('2, 3 and 5 are not divisors of a')
end
OUTPUT:
2, 3 and 5 are not divisors of a
ネストされた条件
私たちが別の条件の中で条件を使うとき、条件は "入れ子になっている"と言います。ネストされた条件の特殊なケースの1つは、 elseif
オプションによって与えられますが、ネストされた条件を使用する他の多くの方法があります。次のコードを見てみましょう:
a = 2;
if mod(a,2)==0 % MOD - modulo operation, return the remainder after division of 'a' by 2
disp('a is even')
if mod(a,3)==0
disp('3 is a divisor of a')
if mod(a,5)==0
disp('5 is a divisor of a')
end
end
else
disp('a is odd')
end
a=2
場合、 a is even
になります。これは正しいです。 a=3
場合、 a is odd
なりますa is odd
、これも正しくなりますが、3がaの約数でa
場合にはチェックに失敗a
ます。これは、条件がネストされているためです。最初の条件がtrue
である場合にのみ内側の条件に移動し、 a
が奇数の場合は内部の条件もチェックされません。これは、最初の条件がfalse
場合にのみ、次の条件をチェックするよりも、 elseif
の使用とやや反対になります。 5で部門をチェックするのはどうですか?除数(2と3の両方)として6を持つ数値のみが5で除算されているかどうかがチェックされ、 a=30
、出力は次のようになります。
a is even
3 is a divisor of a
5 is a divisor of a
私たちはまた、2つのことに気づくべきです:
- 位置
end
ごとに、適切な場所でif
期待どおりに動作する条件のセットのために不可欠であるが、そうインデントはここで良い勧告以上のものです。 -
else
文の位置も重要です。なぜなら、false
場合に何らかの処理をしたいのでif
、複数の場合があるかif
を知る必要があるからです。
別の例を見てみましょう:
for a = 5:10 % the FOR loop execute all the code within it for every a from 5 to 10
ch = num2str(a); % NUM2STR converts the integer a to a character
if mod(a,2)==0
if mod(a,3)==0
disp(['3 is a divisor of ' ch])
elseif mod(a,4)==0
disp(['4 is a divisor of ' ch])
else
disp([ch ' is even'])
end
elseif mod(a,3)==0
disp(['3 is a divisor of ' ch])
else
disp([ch ' is odd'])
end
end
出力は次のようになります。
5 is odd
3 is a divisor of 6
7 is odd
4 is a divisor of 8
3 is a divisor of 9
10 is even
6つの数値に対して6行しか得られないことがわかります。これは、数値が1つの数字に1つの印刷を保証する方法で入れ子になっているためです(出力から直接見ることはできませんが)。 4がそれの約数であるかどうかをチェックする点はない。