10.2 Оператор switch
Очень часто требуется выполнять различные действия в зависимости от значения одной переменной. Это можно сделать с помощью оператора 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 изменится, достаточно будет изменить всего одну строку, в отличие от случая с операторами if, когда нужно менять по одной строке для каждого варианта.
Общий вид оператора switch таков:
switch (expression)
case label
command_list
case label
command_list
...
otherwise
command_list
endswitch где label может быть любым выражением. Однако повторяющиеся значения label не обнаруживаются, и будет выполнен только command_list, соответствующий первому совпадению. Чтобы оператор switch имел смысл, должна присутствовать хотя бы одна ветвь case label command_list, а ветвь otherwise command_list необязательна.
Если label — это массив ячеек, соответствующий command_list выполняется, если хотя бы один из элементов массива ячеек совпадает с expression. Например, следующая программа выведет ‘Переменная равна 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 по сравнению с операторами if состоит в том, что значения label могут быть строками. Если используется оператор if, нельзя написать
if (X == "a string") # This is NOT valid
поскольку вместо проверки равенства строк будет выполнено посимвольное сравнение между X и строкой. Этот особый случай обрабатывается оператором switch, поэтому можно писать программы, подобные следующей
switch (X)
case "a string"
do_something
...
endswitch
© 1996–2026 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v9.4.0/The-switch-Statement.html