Может кто-нибудь объяснит мне это?
В чем разница между IF-ELSE и SWITCH?
Ответ 1
Они довольно похожи, но у каждого есть несколько специальных функций.
Переключатель
-
switch
обычно более компактен, чем много вложенныхif else
и, следовательно, более читаемый - Если вы опустите
break
между двумя случаями переключения, вы можете перейти к следующему случаю на многих языках, подобных C. Сif else
вам понадобитсяgoto
(что не очень приятно для ваших читателей... если язык поддерживаетgoto
вообще). - В большинстве языков
switch
принимает только примитивные типы в качестве ключей и констант в качестве случаев. Это означает, что он может быть оптимизирован компилятором с помощью очень быстрой таблицы перехода. -
Не совсем ясно, как правильно отформатировать
switch
. Семантически, случаями являются цели перехода (например, метки дляgoto
), которые должны быть красными слева. Все становится хуже, когда у вас есть фигурные скобки:case XXX: { } break;
Или должны ли фигурные скобки входить в свои собственные линии? Должна ли закрывающая скобка отстать от
break
? Насколько это невозможно прочитать? и др. - На многих языках
switch
принимает только некоторые типы данных.
если-иначе
-
if
разрешает сложные выражения в условии, в то время как переключатель хочет константу - Вы не можете случайно забыть
break
междуif
, но вы можете забытьelse
(особенно во время cut'n'paste) - он принимает все типы данных.
Ответ 2
Основное отличие состоит в том, что switch
немедленно отправляется в case
, как правило, с помощью индексированного перехода, вместо того, чтобы оценивать все условия, которые потребуются в цепочке if-else
, что означает, что код в конец цепи достигается медленнее, чем код в начале.
Это, в свою очередь, накладывает некоторые ограничения на оператор switch
, который не имеет цепочки if-else
: он не может обрабатывать все типы данных, и все значения case
должны быть постоянными.
Ответ 3
Различия между if-else и switch
-
Выражение внутри оператора if решает, выполнять ли операторы внутри блока if или под блоком else. С другой стороны, выражение внутри оператора switch решает, какой случай выполнить.
-
Оператор if-esle проверяет как равенство, так и логическое выражение. С другой стороны, переключатель проверяет только на равенство.
-
Оператор if вычисляет целочисленный, символьный, указатель или тип с плавающей точкой или логический тип. С другой стороны, оператор switch оценивает только символьный или целочисленный тип данных.
-
Последовательность выполнения аналогична либо оператору в случае выполнения блока, либо операторам в операторе блока else. С другой стороны, выражение в операторе switch решает, какой случай выполнить, и если вы не применяете оператор break после каждого случая, он будет выполняться до конца оператора switch.
-
Если выражение внутри, если получится ложным, будет выполнен оператор внутри блока else. Если выражение внутри оператора switch оказывается ложным, то выполняются операторы по умолчанию.
-
Трудно редактировать операторы if-else, так как утомительно прослеживать, где требуется исправление. С другой стороны, операторы switch легко редактировать, так как их легко отслеживать.
одним словом мы можем сказать, что переключатель действует немного быстрее, чем оператор if !!!
Ответ 4
IF else - используется для принятия решений
Оператор switch - используется для проверки значения данной переменной на список значений case.
Ответ 5
Разница между Switch и оператором if-else ниже:
Это общий синтаксис лестницы if-else:
if (condition1) { //Body of if }
else if (condition2) { //Body of if }
else if (condition3) { //Body of if }
else { //default if all conditions return false }
И это общий синтаксис для переключения:
switch ( variable )
{
case <variable value1>: //Do Something
break;
case <variable value2>://Do Something
break;
default: //Do Something
break;
}
Лестница if-else имеет строгую проверку состояния типа, в то время как switch имеет ловушку типа прыжка.
Преимущества переключения лестниц if-else:
- Оператор switch работает намного быстрее, чем эквивалентная лестница if-else. Это потому, что компилятор генерирует таблицу переходов для переключателя во время компиляции. Следовательно, во время выполнения вместо проверки того, какой случай удовлетворен, он только решает, какой случай должен быть выполнен.
- Это более читабельно и по сравнению с операторами if-else.
Ответ 6
Я считаю, что основное отличие состоит в том, что в блоках if-else мы можем тестировать условия. Но это не так точно в коммутаторе