0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Многие языки используют не только условную конструкцию if, но и switch в дополнение к ней. Конструкция switch - это специализированная версия if, созданная для некоторых особых ситуаций.</p>
1
<p>Многие языки используют не только условную конструкцию if, но и switch в дополнение к ней. Конструкция switch - это специализированная версия if, созданная для некоторых особых ситуаций.</p>
2
<p>Например, ее стоит использовать там, где есть цепочка if else с проверками на равенство:</p>
2
<p>Например, ее стоит использовать там, где есть цепочка if else с проверками на равенство:</p>
3
<p>Эта составная проверка обладает одной отличительной чертой: каждая ветка здесь - это проверка значения переменной status. Конструкция switch позволяет записать этот код короче и выразительнее:</p>
3
<p>Эта составная проверка обладает одной отличительной чертой: каждая ветка здесь - это проверка значения переменной status. Конструкция switch позволяет записать этот код короче и выразительнее:</p>
4
<p>С точки зрения количества элементов, switch - довольно сложная конструкция. В нее входят:</p>
4
<p>С точки зрения количества элементов, switch - довольно сложная конструкция. В нее входят:</p>
5
<ul><li>Внешнее описание с ключевым словом switch. В нем два элемента:<ul><li>Переменная, по значениям которой switch будет выбирать поведение</li>
5
<ul><li>Внешнее описание с ключевым словом switch. В нем два элемента:<ul><li>Переменная, по значениям которой switch будет выбирать поведение</li>
6
<li>Фигурные скобки для вариантов выбора</li>
6
<li>Фигурные скобки для вариантов выбора</li>
7
</ul></li>
7
</ul></li>
8
<li>Конструкции case и default, внутри которых описывается поведение для разных значений рассматриваемой переменной. Каждый case соответствует if, как в примере выше. Здесь default - это особая ситуация, соответствующая ветке else в условных конструкциях. Как и в случае с else, указывать default необязательно</li>
8
<li>Конструкции case и default, внутри которых описывается поведение для разных значений рассматриваемой переменной. Каждый case соответствует if, как в примере выше. Здесь default - это особая ситуация, соответствующая ветке else в условных конструкциях. Как и в случае с else, указывать default необязательно</li>
9
<li>Конструкция break, который предотвращает "проваливание". Если ее не указать, то после выполнения нужного case, выполнение перейдет к следующему case. Этот цикл будет повторяться до ближайшего break или до конца switch</li>
9
<li>Конструкция break, который предотвращает "проваливание". Если ее не указать, то после выполнения нужного case, выполнение перейдет к следующему case. Этот цикл будет повторяться до ближайшего break или до конца switch</li>
10
</ul><p>Фигурные скобки в switch не определяют блок кода, как это было в других местах. Внутри допускается только тот синтаксис, который показан выше - там можно использовать case или default. А вот внутри каждого case (и default) ситуация другая. Здесь можно выполнять любой произвольный код:</p>
10
</ul><p>Фигурные скобки в switch не определяют блок кода, как это было в других местах. Внутри допускается только тот синтаксис, который показан выше - там можно использовать case или default. А вот внутри каждого case (и default) ситуация другая. Здесь можно выполнять любой произвольный код:</p>
11
<p>Иногда результат, полученный внутри case - это конец выполнения метода, содержащего switch. В таком случае его нужно как-то вернуть наружу. Для решения этой задачи есть два способа.</p>
11
<p>Иногда результат, полученный внутри case - это конец выполнения метода, содержащего switch. В таком случае его нужно как-то вернуть наружу. Для решения этой задачи есть два способа.</p>
12
<p>Первый способ - можно создать переменную перед switch, заполнить ее в case и затем вернуть значение этой переменной наружу:</p>
12
<p>Первый способ - можно создать переменную перед switch, заполнить ее в case и затем вернуть значение этой переменной наружу:</p>
13
<p>Второй способ проще и короче. Вместо создания переменной можно использовать case, внутри которого можно делать обычный возврат из метода. После return никакой код не выполняется, так что мы можем избавиться от break:</p>
13
<p>Второй способ проще и короче. Вместо создания переменной можно использовать case, внутри которого можно делать обычный возврат из метода. После return никакой код не выполняется, так что мы можем избавиться от break:</p>
14
<p>Switch хоть и встречается в коде, но технически всегда можно обойтись без него.</p>
14
<p>Switch хоть и встречается в коде, но технически всегда можно обойтись без него.</p>
15
<p>Польза этой конструкции в том, что она лучше выражает намерение программиста, когда нужно проверять конкретные значения переменной. В отличие от блоков else if, код со switch становится немного длиннее, но читать его гораздо проще.</p>
15
<p>Польза этой конструкции в том, что она лучше выражает намерение программиста, когда нужно проверять конкретные значения переменной. В отличие от блоков else if, код со switch становится немного длиннее, но читать его гораздо проще.</p>