Многие языки используют не только условную конструкцию if
, но и switch
в дополнение к ней. Конструкция switch
— это специализированная версия if
, созданная для некоторых особых ситуаций.
Например, ее стоит использовать там, где есть цепочка if else
с проверками на равенство:
if (status.equals("processing")) {
// Делаем раз
} else if (status.equals("paid")) {
// Делаем два
} else if (status.equals("new")) {
// Делаем три
} else {
// Делаем четыре
}
Эта составная проверка обладает одной отличительной чертой: каждая ветка здесь — это проверка значения переменной status
. Конструкция switch
позволяет записать этот код короче и выразительнее:
switch (status) {
case "processing":
// Делаем раз
break;
case "paid":
// Делаем два
break;
case "new":
// Делаем три
break;
default: // else
// Делаем четыре
}
С точки зрения количества элементов, switch
— довольно сложная конструкция. В нее входят:
switch
. В нем два элемента:
switch
будет выбирать поведениеcase
и default
, внутри которых описывается поведение для разных значений рассматриваемой переменной. Каждый case
соответствует if
, как в примере выше. Здесь default
— это особая ситуация, соответствующая ветке else
в условных конструкциях. Как и в случае с else
, указывать default
необязательноbreak
, который предотвращает «проваливание». Если ее не указать, то после выполнения нужного case
, выполнение перейдет к следующему case
. Этот цикл будет повторяться до ближайшего break
или до конца switch
Фигурные скобки в switch
не определяют блок кода, как это было в других местах. Внутри допускается только тот синтаксис, который показан выше — там можно использовать case
или default
. А вот внутри каждого case
(и default
) ситуация другая. Здесь можно выполнять любой произвольный код:
switch (count) {
case 1:
// Делаем что-то полезное
break;
case 2:
// Делаем что-то полезное
break;
default:
// Что-то делаем
}
Иногда результат, полученный внутри case
— это конец выполнения метода, содержащего switch
. В таком случае его нужно как-то вернуть наружу. Для решения этой задачи есть два способа.
Первый способ — можно создать переменную перед switch
, заполнить ее в case
и затем вернуть значение этой переменной наружу:
class App {
public static String getExplanation(int count) {
// Объявляем переменную
String result;
// Заполняем
switch(count) {
case 1:
result = "one";
break;
case 2:
result = "two";
break;
default:
result = null;
}
// Возвращаем
return result;
}
}
Второй способ проще и короче. Вместо создания переменной можно использовать case
, внутри которого можно делать обычный возврат из метода. После return
никакой код не выполняется, так что мы можем избавиться от break
:
class App {
public static String getExplanation(int count) {
switch(count) {
case 1:
return "one";
case 2:
return "two";
default:
return null;
}
}
}
https://replit.com/@hexlet/java-basics-switch
Switch
хоть и встречается в коде, но технически всегда можно обойтись без него.
Польза этой конструкции в том, что она лучше выражает намерение программиста, когда нужно проверять конкретные значения переменной. В отличие от блоков else if
, код со switch
становится немного длиннее, но читать его гораздо проще.
Вам ответят команда поддержки Хекслета или другие студенты.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт