10.1 if文
ステートメントifは Octave の意思決定ステートメントです。ifステートメントには 3 つの基本的な形式があります。最も単純な形式では、次のようになります。
if (condition) then-body endif
condition は、ステートメントの残りの部分の動作を制御する式です。then -body は、conditionが true の場合にのみ実行されます 。
ステートメント内の条件はif、その値がゼロ以外の場合は真とみなされ、その値がゼロの場合は偽とみなされます。ステートメント内の条件式の値がifベクトルまたは行列の場合、その値が空でなく、すべての要素がゼロ以外の場合にのみ真とみなされます。条件が行列の 場合の概念的に同等のコード を以下に示します。
if (matrix) ≡ if (all (matrix(:)))
if ステートメントの 2 番目の形式は次のようになります。
if (condition) then-body else else-body endif
条件が真の場合、then-bodyが実行され、そうでない場合は else-bodyが実行されます。
次に例を示します。
if (rem (x, 2) == 0)
printf ("x is even\n");
else
printf ("x is odd\n");
endif
この例では、式rem (x, 2) == 0が true (つまり、 の値がx2 で割り切れる) の場合は最初の printfステートメントが評価され、それ以外の場合は 2 番目のprintf ステートメントが評価されます。
3 番目で最も一般的な形式のifステートメントでは、複数の決定を 1 つのステートメントに組み合わせることができます。次のようになります。
if (condition) then-body elseif (condition) elseif-body else else-body endif
任意の数のelseif節を指定できます。各条件は順番にテストされ、1 つでも真であると判断された場合、対応する 本体が実行されます。いずれの条件も真でなく、 else節が存在する場合は、その本体が実行されます。 else指定できる節は 1 つだけで、ステートメントの最後の部分である必要があります。
次の例では、最初の条件が真 (つまり、 の値がx2 で割り切れる) の場合、最初のprintf ステートメントが実行されます。偽の場合は、2 番目の条件がテストされ、真 (つまり、 の値がx3 で割り切れる) の場合は、2 番目のprintfステートメントが実行されます。それ以外の場合は、3 番目のprintfステートメントが実行されます。
if (rem (x, 2) == 0)
printf ("x is even\n");
elseif (rem (x, 3) == 0)
printf ("x is odd and divisible by 3\n");
else
printf ("x is odd\n");
endif
elseifキーワードは、Fortranで許可されているように と綴ってはならないことに注意してください。 と綴った場合、 とelse ifの間のスペースは、これを別の文の節 内の新しい文として扱うようにOctaveに指示します。たとえば、次のように書いた場合、 elseifififelse
if (c1) body-1 else if (c2) body-2 endif
Octave は、最初のif ステートメントを完了するために追加の入力を期待します。Octave を対話的に使用している場合は、追加の入力を要求し続けます。Octave がファイルからこの入力を読み込んでいる場合、endステートメントが欠落しているか一致していないというエラーが表示されることがあります。また、より具体的なendステートメント ( endif、endforなど) を使用していない場合は、警告メッセージは表示されずに、単に誤った結果が生成されることがあります。
上記の文を次のように書き直すと、エラーが分かりやすくなります。
if (c1) body-1 else if (c2) body-2 endif
インデントを使用して、Octave がステートメントをグループ化する方法を示します。関数とスクリプトを参照してください。