Инструкция переключатель ( англ. Switch statement ), также известная как инструкция выбора и оператор переключатель (switch, case, select или inspect) - это специального вида инструкция языка программирования, который обеспечивает многонаправленные (множественное) разветвления в программе. Название инструкции в разных языках может различаться, в основном - это инструкции switch, case, select или inspect. Данный механизм выбора существует в большинстве императивных языках программирования таких как Pascal, Ada, C / C++, C#, Java и т.п. Инструкция переключатель позволяет делать выбор одной из множества альтернатив.
Общий принцип
Она работает следующим образом:
-
Значение выражения последовательно сравнивается с константами из заданного списка.
-
При обнаружении совпадения для одного из условий сравнения выполняется последовательность инструкций, связанная с этим условием.
Хотя многонаправленные тестирования можно реализовать с помощью последовательности вложенных if-инструкций, для многих ситуаций инструкция switch оказывается более эффективным решением.
Примеры
Далее приведены простые примеры написаны на некоторых языках программирования, использующих перимикач, печатающие строку текста, содержание которого зависит от значения введенного пользователем.
C, C++, D, Java, PHP, ActionScript, JavaScript
switch (n) {
case 0:
printf("You typed zero.");
break;
case 1:
case 4:
case 9:
printf("n is a perfect square.");
break;
case 2:
printf("n is an even number.");
case 3:
case 5:
case 7:
printf("n is a prime number.");
break;
case 6:
case 8:
printf("n is an even number.");
break;
default:
printf("Only single-digit numbers are allowed.");
break;
}
C#
switch (n)
{
case 0:
Console.WriteLine("You typed zero.");
break;
case 1:
case 4:
case 9:
Console.WriteLine("n is a perfect square.");
break;
case 2:
Console.WriteLine("n is an even number.");
goto case 3;
case 3:
case 5:
case 7:
Console.WriteLine("n is a prime number.");
break;
case 6:
case 8:
Console.WriteLine("n is an even number.");
break;
default:
Console.WriteLine("Only single-digit numbers are allowed.");
break;
}
Pascal
case age of
0,1: writeln('baby');
2,3,4: writeln('toddler');
5..12: writeln('kid');
13..19: writeln('teenager');
20..25: writeln('young');
else writeln('old ;)');
end;
Perl
use feature 'switch';
given ($foo) {
when (undef) {
say '$foo is undefined';
}
when ("foo") {
say '$foo is the string "foo"';
}
when ([1,3,5,7,9]) {
say '$foo is an odd digit';
continue; # Fall through
}
when ($_ < 100) {
say '$foo is numerically less than 100';
}
when (\&complicated_check) {
say 'a complicated check for $foo is true';
}
default {
die "I don't know what to do with $foo";
}
}