HTML Diff
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>