В чем разница между IF-ELSE и SWITCH? - PullRequest
27 голосов
/ 25 марта 2009

Может кто-нибудь объяснить это мне?

Ответы [ 6 ]

35 голосов
/ 25 марта 2009

Они очень похожи, но у каждого есть несколько особенностей.

переключатель

  • switch обычно более компактен, чем множество вложенных if else и, следовательно, более читабелен
  • Если вы опустите break между двумя вариантами переключения, вы можете перейти к следующему случаю во многих C-подобных языках. С if else вам понадобится goto (что не очень приятно для ваших читателей ... если язык вообще поддерживает goto).
  • В большинстве языков switch принимает только примитивные типы в качестве ключей и константы в качестве падежей. Это означает, что он может быть оптимизирован компилятором с использованием очень быстрой таблицы переходов.
  • Не совсем понятно, как правильно отформатировать switch. Семантически случаи - это цели прыжка (например, метки для goto), которые должны быть сброшены влево. Вещи ухудшаются, когда у вас есть фигурные скобки:

    case XXX: {
    } break;
    

    Или фигурные скобки должны идти своими линиями? Должна ли закрывающая скобка идти за break? Насколько это нечитабельно? и т.д.

  • Во многих языках switch принимает только некоторые типы данных.

если-то еще

  • if разрешает сложные выражения в условии, в то время как switch хочет постоянную
  • Вы не можете случайно забыть break между if с, но вы можете забыть else (особенно во время нарезки пасты)
  • принимает все типы данных.
2 голосов
/ 13 сентября 2017

Различия между if-else и switch

  1. Выражение внутри оператора if решает, выполнять ли операторы внутри блока if или под блоком else. С другой стороны, выражение внутри оператора switch решает, какой случай выполнить.

  2. Оператор if-esle проверяет равенство и логическое выражение. С другой стороны, переключатель проверяет только на равенство.

  3. Оператор if оценивает целочисленный, символьный, указатель или тип с плавающей точкой или логический тип. С другой стороны, оператор switch оценивает только символьный или целочисленный тип данных.

  4. Последовательность выполнения аналогична либо оператору, в котором будет выполняться блок, либо операторам, находящимся в операторе else, в блоке. С другой стороны, выражение в операторе switch решает, какой случай выполнить, и если вы не применяете оператор break после каждого случая, он будет выполняться до конца оператора switch.

  5. Если выражение внутри, если получится ложным, будет выполнен оператор внутри блока else. Если выражение внутри оператора switch оказывается ложным, то выполняются операторы по умолчанию.

  6. Трудно редактировать операторы if-else, так как сложно отследить, где требуется исправление. С другой стороны, операторы switch легко редактировать, так как их легко отслеживать.

одним словом мы можем сказать switch действует немного быстрее, чем оператор else !!!

2 голосов
/ 12 мая 2016

Основное различие заключается в том, что switch отправляет немедленно в соответствующий case, как правило, посредством индексного перехода, вместо того, чтобы оценивать все условия, которые потребуются в цепочке if-else , что означает, что код в конце цепочки достигается медленнее, чем код в начале.

Это, в свою очередь, накладывает некоторые ограничения на оператор switch, которого нет в цепочке if-else: он не может обрабатывать все типы данных, и все значения case должны быть постоянными.

1 голос
/ 05 января 2017

Разница между 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 относится к типу строгой проверки состояния, в то время как переключатель имеет тип скачка значения захвата.

Преимущества переключения лестниц if-else:

  • Оператор switch работает намного быстрее, чем эквивалентная лестница if-else. Это потому, что компилятор генерирует таблицу переходов для переключателя во время компиляции. Следовательно, во время выполнения вместо проверки того, какой случай удовлетворен, он только решает, какой случай должен быть выполнен.
  • Он более читабелен и по сравнению с операторами if-else.
1 голос
/ 20 марта 2015

ЕСЛИ еще - ЭТО используется для принятия решения

Оператор переключения - используется для проверки значения данной переменной по списку значений регистра.

0 голосов
/ 01 сентября 2009

Я думаю, что главное отличие состоит в том, что в блоках if-else мы можем проверять условия. Но в коммутаторе все идет не так, как надо

...