10.1 The if Statement

Last-modified: 2025-03-04 (火) 20:46:39

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 がステートメントをグループ化する方法を示します。関数とスクリプトを参照してください。