Spec-Zone.ru › Octave 9

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
  • Примечания для программистов на C

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API