Ссылка на оригинальную статью
switch является оператором ветвления в языках программирования, в том числе и в Haxe.
Конструкция
switch открывается выражением «switch» и тело функции ограничивается фигурными скобками {}. Ветки
switch начинаются или с ключевого слова «case» с условием выполнения данной ветки, или же с ключевого слова «default» для состояния по умолчанию. В обоих случаях после условия идет двоеточие : и блок операторов, которой надо выполнить.
1 2 3 4 5 |
switch (переменная) { case условие1: оператор1; оператор2; оператор3; case условие2: оператор4; default: оператор; } |
Так как в Haxe ветки case выполняются независимо, break не нужен.
Конструкции
switch могут быть использованы как значение; в таком случае типы всех case и default должны унифицироваться.
Пример. Программа, которая выводит текущий день недели.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Test { static function main() { trace(Date.now()); var t = Date.now(); var b = t.getDay(); switch (b){ case 0: trace("Sunday"); case 1: trace("Monday"); case 2: trace("Tuesday"); case 3: trace("Wednesday"); case 4: trace("Thursday"); case 5: trace("Friday"); case 6: trace("Saturday"); } } } |
Haxe позволяет использовать выражения, например, мы можем в предыдущем примере написать не b, а b+1, если мы захотим узнать следующий день.
Также Haxe дает нам большие возможности в использовании
switch. Например, мы можем проверять соответствия значений различных типов с помощью регулярных выражений (шаблонов).
Рассмотрим пример с массивом, взятый из данной статьи. В качестве входного параметра для оператора
switch дается массив фиксированной длины. В зависимости от заполнения и длины массива, оператор будет выдавать нужный результат. Данный пример показывает нам, что мы можем указывать как и нужный нам размер массива, так и заполнение определенной ячейки массива. Например, программа выведет 0 только при массиве длинной в два элемента, где в первой ячейке будет число 2. Если же размер массива будет другой или первой будет стоять не 2, то оператор продолжит сравнения с остальными условиями. В данном примере роль состояния по умолчанию выполняет последнее условие, которое «пропускает» любой массив. Стоит заметить, что если выполняются сразу два условия, например, массив будет состоять из [2,6], то программа все равно выведет 0, так как первое условие идет раньше.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class Test { static function main() { var myArray = [2,6]; var match = switch(myArray) { case [2, _]: "0"; case [_, 6]: "1"; case []: "2"; case [_, _, _]: "3"; case _: "4"; } trace(match); } } |
- e-olymp 903. Первая или последняя? - 21.06.2017
- e-olymp 916. Интересное произведение - 21.06.2017
- e-olymp 2392. Интересная сумма - 20.06.2017
— Зачем использовать switch для проверки на четность? Разберитесь для чего он вообще нужен.
— Это не совсем оператор switch. Скорее выражение. Мы ведь можем писать так
Спасибо, исправила
Switch это очень интересная вещь в Haxe, советую посмотреть все подкаталоги по этой ссылке.
Нам намекают, что можно сделать более изощренный пример, чем со скалярными значениями. Интересно, с массивом можно? Вроде можно. Почему бы не разобрать детально этот пример из ссылки:
Почему-то опустили ссылки в конце оригинального текста.
Да! И почему в switch (переменная)? Т.е. там не может быть выражения, например x+1?
Добавила ссылку в тексте и добавила новый пример.