サーチ…


構文

  • 表現 ... 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

ここでは、 aelse実行後にコードの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つのことに気づくべきです:

  1. 位置endごとに、適切な場所でif期待どおりに動作する条件のセットのために不可欠であるが、そうインデントはここで良い勧告以上のものです。
  2. 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がそれの約数であるかどうかをチェックする点はない。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow