Основы Java
Теория: Конструкция Switch
Многие языки используют не только условную конструкцию if, но и switch в дополнение к ней. Конструкция switch — это специализированная версия if, созданная для некоторых особых ситуаций.
Например, ее стоит использовать там, где есть цепочка if else с проверками на равенство:
Эта составная проверка обладает одной отличительной чертой: каждая ветка здесь — это проверка значения переменной status. Конструкция switch позволяет записать этот код короче и выразительнее:
С точки зрения количества элементов, switch — довольно сложная конструкция. В нее входят:
- Внешнее описание с ключевым словом
switch. В нем два элемента:- Переменная, по значениям которой
switchбудет выбирать поведение - Фигурные скобки для вариантов выбора
- Переменная, по значениям которой
- Конструкции
caseиdefault, внутри которых описывается поведение для разных значений рассматриваемой переменной. Каждыйcaseсоответствуетif, как в примере выше. Здесьdefault— это особая ситуация, соответствующая веткеelseв условных конструкциях. Как и в случае сelse, указыватьdefaultнеобязательно - Конструкция
break, который предотвращает «проваливание». Если ее не указать, то после выполнения нужногоcase, выполнение перейдет к следующемуcase. Этот цикл будет повторяться до ближайшегоbreakили до концаswitch
Фигурные скобки в switch не определяют блок кода, как это было в других местах. Внутри допускается только тот синтаксис, который показан выше — там можно использовать case или default. А вот внутри каждого case (и default) ситуация другая. Здесь можно выполнять любой произвольный код:
Иногда результат, полученный внутри case — это конец выполнения метода, содержащего switch. В таком случае его нужно как-то вернуть наружу. Для решения этой задачи есть два способа.
Первый способ — можно создать переменную перед switch, заполнить ее в case и затем вернуть значение этой переменной наружу:
Второй способ проще и короче. Вместо создания переменной можно использовать case, внутри которого можно делать обычный возврат из метода. После return никакой код не выполняется, так что мы можем избавиться от break:
Switch хоть и встречается в коде, но технически всегда можно обойтись без него.
Польза этой конструкции в том, что она лучше выражает намерение программиста, когда нужно проверять конкретные значения переменной. В отличие от блоков else if, код со switch становится немного длиннее, но читать его гораздо проще.

