Основы Java
2026-02-26 17:15 Diff

Многие языки используют не только условную конструкцию 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 становится немного длиннее, но читать его гораздо проще.