メインコンテンツ

switch, case, otherwise

ステートメントのグループのいずれか 1 つを実行

構文

switch switch_expression
   case case_expression
      statements
   case case_expression
      statements
    ...
   otherwise
      statements
end

説明

switch switch_expression, case case_expression, end は式を評価し、ステートメントのグループのいずれか 1 つを実行するよう選択します。選択肢は case です。

switch ブロックは、true のケース式が見つかるまで、各 case をテストします。以下の場合、case は true です。

  • 数値の場合、case_expression == switch_expression

  • 文字ベクトルおよび string の場合、strcmp(case_expression,switch_expression) == 1。文字ベクトルの cell 配列は特殊なケースであり、cell 配列の少なくとも 1 つの要素が一致すれば case が一致します。

  • 関数 eq をサポートするオブジェクトの場合、case_expression == switch_expression。オーバーロードされた関数 eq の出力は logical 値か logical 値に変換可能かのいずれかでなければなりません。

  • 数値、文字ベクトル、オブジェクトに対して上記で定義されているように、cell 配列 case_expression の場合、cell 配列の少なくとも 1 つの要素は switch_expression と一致します。

ケース式が true の場合、MATLAB® は対応するステートメントを実行し、switch ブロックを終了します。

評価された switch_expression は、スカラーまたは文字ベクトルでなければなりません。評価された case_expression は、スカラー、文字ベクトル、またはスカラーか文字ベクトルの cell 配列でなければなりません。

otherwise ブロックはオプションです。MATLAB は true になる case がない場合にのみステートメントを実行します。

すべて折りたたむ

コマンド プロンプトに入力された値に応じて異なるテキストを条件付きで表示します。

n = input('Enter a number: ');

switch n
    case -1
        disp('negative one')
    case 0
        disp('zero')
    case 1
        disp('positive one')
    otherwise
        disp('other value')
end

コマンド プロンプトで、番号「1」を入力します。

positive one

コードを繰り返し、番号「3」を入力します。

other value

plottype の値に従って作成するプロットのタイプを決定します。plottype'pie' または 'pie3' のいずれかの場合、3 次元円グラフを作成します。cell 配列を使用して両方の値を格納してください。

x = [12 64 24];
plottype = 'pie3';

switch plottype
    case 'bar' 
        bar(x)
        title('Bar Graph')
    case {'pie','pie3'}
        pie3(x)
        title('Pie Chart')
    otherwise
        warning('Unexpected plot type. No plot created.')
end

Figure contains an axes object. The hidden axes object with title Pie Chart contains 12 objects of type patch, surface, text.

ヒント

  • switch_expression と比較するために、case_expression に、<> などの関係演算子を含めることはできません。非等価性をテストするには、if, elseif, else ステートメントを使用します。

  • MATLAB switch ステートメントは C 言語の switch ステートメントとは異なり、何かを必ず実行します。最初の case ステートメントが true の場合、MATLAB は他の case ステートメントを実行しません。以下に例を示します。

    result = 52;
    
    switch(result)
       case 52
          disp('result is 52')
       case {52, 78}
          disp('result is 52 or 78')
    end
    result is 52
  • その case 内の特定の case のコードに必要なすべての変数を定義します。MATLAB が switch ステートメントの case を 1 つだけ実行するので、1 つの case 内に定義された変数を他の case に使用できません。たとえば、現在のワークスペースに変数 x が含まれていない場合は、x を定義している case のみがその変数を使用することができます。

    switch choice
       case 1
          x = -pi:0.01:pi;
       case 2
          % does not know anything about x
    end
  • MATLAB break ステートメントは、for ループまたは while ループの実行を終了させますが、switch ステートメントの実行は終了させません。この動作は、C における break および switch の動作とは異なります。

拡張機能

すべて展開する

バージョン履歴

R2006a より前に導入

参考

| | |