Update and fix riussian translation of switch statement (#34013)
This commit is contained in:
committed by
Randell Dawson
parent
04c5d1e948
commit
2e727785fb
@ -1,38 +1,38 @@
|
|||||||
---
|
---
|
||||||
title: Switch Case
|
title: switch case
|
||||||
localeTitle: Корпус выключателя
|
localeTitle: switch case
|
||||||
---
|
---
|
||||||
# Корпус выключателя
|
# switch case
|
||||||
|
|
||||||
Оператор switch похож на набор `if statements` .
|
Оператор switch похож на набор операторов `if` .
|
||||||
|
|
||||||
Это список возможностей с действием для каждой возможности и необязательным действием по умолчанию, если ничто иное не оценивает значение true.
|
Он представляет собой список возможных вариантов, с действием для каждого варианта и необязательным действием по умолчанию, если ни один вариант не сработал.
|
||||||
|
|
||||||
Мы выходим из коммутатора на `break` . Если оператор `break` не будет достигнут до начала следующего случая, выполнение провалится и начнет выполнение кода в следующем случае.
|
Мы выходим из оператора switch с помощью `break` . Если оператор `break` не будет встречен до начала следующей метки case, программа начнет выполнять инструкции следующей метки case.
|
||||||
|
|
||||||
## Синтаксис переключателя ... case
|
## Синтаксис switch...case
|
||||||
|
|
||||||
```c
|
```c
|
||||||
switch (n)
|
switch (n)
|
||||||
{
|
{
|
||||||
case constant1:
|
case constant1:
|
||||||
// code to be executed if n is equal to constant1;
|
// код, который необходимо выполнить в случае, если n равно constant1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case constant2:
|
case constant2:
|
||||||
// code to be executed if n is equal to constant2;
|
// код, который необходимо выполнить в случае, если n равно constant2;
|
||||||
break;
|
break;
|
||||||
.
|
.
|
||||||
.
|
.
|
||||||
.
|
.
|
||||||
default:
|
default:
|
||||||
// code to be executed if n doesn't match any constant
|
// код, который необходимо выполнить в случае, если n не равно ни одной из констант
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## пример
|
## Пример
|
||||||
|
|
||||||
Использование оператора switch над несколькими операторами if / else может способствовать большей скорости и удобочитаемости.
|
Использование оператора switch вместо нескольких операторов if/else может способствовать большей скорости и удобочитаемости.
|
||||||
|
|
||||||
```c
|
```c
|
||||||
# include <stdio.h>
|
# include <stdio.h>
|
||||||
@ -61,9 +61,9 @@ switch (n)
|
|||||||
case '/':
|
case '/':
|
||||||
printf("%.1lf / %.1lf = %.1lf",firstNumber, secondNumber, firstNumber/firstNumber);
|
printf("%.1lf / %.1lf = %.1lf",firstNumber, secondNumber, firstNumber/firstNumber);
|
||||||
break;
|
break;
|
||||||
// Operator is doesn't match any case constant (+, -, *, /)
|
// operator не равен ни одной из констант в case (+, -, *, /)
|
||||||
default:
|
default:
|
||||||
printf("Error! operator is not correct");
|
printf("Error! Operator is not correct");
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -72,18 +72,18 @@ switch (n)
|
|||||||
|
|
||||||
## Вывод:
|
## Вывод:
|
||||||
|
|
||||||
```c
|
```
|
||||||
-> Enter an operator (+, -, *,): -
|
-> Enter an operator (+, -, *,): -
|
||||||
-> Enter two operands: 32.5
|
-> Enter two operands: 32.5
|
||||||
-> 12.4
|
-> 12.4
|
||||||
-> 32.5 - 12.4 = 20.1
|
-> 32.5 - 12.4 = 20.1
|
||||||
```
|
```
|
||||||
|
|
||||||
## Обзор: Switch vs if else
|
## Обзор: switch vs if/else
|
||||||
|
|
||||||
* Проверьте выражение тестирования: оператор if-then-else может тестировать выражения на основе диапазонов значений или условий, тогда как оператор switch проверяет выражения, основанные только на одном целочисленном, перечисляемом значении или объекте String.
|
* Проверьте выражение тестирования: оператор if/else может тестировать выражения на основе диапазонов значений или условий, тогда как оператор switch проверяет выражения, основанные только на одиночном целом числе, перечисляемом значении или строке.
|
||||||
* Лучше переключайтесь на многопоточность: когда компилятор компилирует оператор switch, он проверяет каждую из констант case и создает «таблицу перехода», которую он будет использовать для выбора пути выполнения в зависимости от значения выражения. Поэтому, если нам нужно выбрать среди большой группы значений, оператор switch будет работать намного быстрее, чем эквивалентная логическая кодировка с использованием последовательности if-elses. Компилятор может это сделать, потому что он знает, что константы case имеют одинаковый тип и просто должны сравниваться для равенства с выражением switch, тогда как в случае выражений компилятор не имеет таких знаний.
|
* switch более подходит для множественных ветвлений: когда компилятор компилирует оператор switch, он проверяет каждую из констант case и создает «таблицу переходов», которую он будет использовать для выбора пути выполнения в зависимости от значения выражения. Поэтому, если нам нужно выбрать среди большой группы значений, оператор switch будет работать намного быстрее, чем эквивалентная логика, реализованная с использованием последовательности операторов if/else. Компилятор может это сделать, потому что он знает, что константы case имеют одинаковый тип и просто должны сравниваться на равенство с выражением switch, тогда как в случае операторов if у компилятора нет таких сведений.
|
||||||
* if-else лучше для логических значений: If-else условные ветви отлично подходят для переменных условий, которые приводят к булевому, тогда как операторы switch отлично подходят для фиксированных значений данных.
|
* if/else лучше для логических значений: условные ветви оператора if/else отлично подходят для переменных условий, которые вычисляются в булево значение, тогда как операторы switch отлично подходят для фиксированных значений данных.
|
||||||
* Скорость. Оператор switch может оказаться быстрее, чем если бы при условии, что количество дел является хорошим. Если есть только несколько случаев, это может не повлиять на скорость в любом случае. Переключатель предпочтений, если число случаев больше, чем 5, иначе вы можете использовать if-else.
|
* Скорость. Оператор switch может оказаться быстрее чем if/else, при условии, достаточно большого количества меток case. Если меток case мало, это может не оказать влияние на скорость. Отдавайте предпочтение switch в случае, когда количество меток case превышает 5, иначе можно также использовать if/else.
|
||||||
* Если коммутатор содержит более пяти элементов, он реализуется с помощью таблицы поиска или хеш-листа. Это означает, что все элементы получают одинаковое время доступа по сравнению со списком if: s, где последний элемент занимает гораздо больше времени для достижения, поскольку он должен сначала оценивать каждое предыдущее условие.
|
* Если switch содержит более пяти веток, он реализуется с помощью таблицы поиска или хеш-листа. Это означает, что все элементы получают одинаковое время доступа, в отличие от списка веток if/else, где достижение последнего элемента занимает гораздо больше времени, поскольку необходимо вычислить все предыдущие условия.
|
||||||
* Ясность в удобочитаемости: коммутатор выглядит намного чище, когда вам приходится комбинировать случаи. Ifs также очень уязвимы для ошибок. Отсутствие заявления другого может нанести вам ущерб. Добавление и удаление меток также проще с помощью переключателя и делает ваш код значительно легче изменять и поддерживать.
|
* Ясность и удобочитаемость: switch выглядит намного чище, если вам приходится комбинировать метки case. Операторы if помимо прочего очень уязвимы для ошибок. Пропущенное ключевое слово else может нанести вам большой ущерб. Добавление и удаление меток в операторе switch значительно проще и делает ваш код значительно легче модифицируемым и поддерживаемым.
|
||||||
|
Reference in New Issue
Block a user