10.2 The switch Statement

Last-modified: 2025-03-04 (火) 20:48:34

10.2 switch文

1つの変数の値に応じて異なるアクションを実行することは非常に一般的です。これは、if次のステートメント を使用して可能です。

if (X == 1)
 do_something ();
elseif (X == 2)
 do_something_else ();
else
 do_something_completely_different ();
endif

しかし、このようなコードは書くのも維持するのも非常に面倒です。この問題を克服するために、Octaveはswitch ステートメントをサポートしています。このステートメントを使用すると、上記の例は次のようになります。

switch (X)
 case 1
   do_something ();
 case 2
   do_something_else ();
 otherwise
   do_something_completely_different ();
endswitch

このコードにより、問題の反復構造がより明確になり、コードが読みやすくなり、保守しやすくなります。また、変数の名前を変更する必要がある場合、ステートメントが使用される X場合のケースごとに 1 行を変更するのに対し、変更する必要があるのは 1 行だけです。if

声明の一般的な形式switchは

switch (expression)
 case label
   command_list
 case label
   command_list
 ...
 otherwise
   command_list
endswitch

ここで、 label は任意の式にすることができます。ただし、重複する label値は検出されず、 最初の一致に対応する command_listswitchのみが実行されます。ステートメントが意味を持つためには、少なくとも 1 つの 句が存在する必要がありますが、句はオプションです。 case label command_listotherwise command_list

ラベルがセル配列の場合、セル配列の要素の いずれかが式と一致すると、対応するコマンドリスト が実行されます。例として、次のプログラムは「変数は6または7です'。

A = 7;
switch (A)
 case { 6, 7 }
   printf ("variable is either 6 or 7\n");
 otherwise
   printf ("variable is neither 6 nor 7\n");
endswitch

end他のすべての特定のキーワードと同様に、endswitchは に置き換えることができますendが、特定の形式を使用すると、より適切な診断が得られます。

switchステートメントを使用するよりも ステートメントを使用する 利点の1つは、ラベルsが文字列である ifことです。ステートメントを使用すると、次のように記述することはでき ません。if

switch (X)
 case "a string"
   do_something
 ...
endswitch

Notes for the C Programmer