Переключатель против операторов if - PullRequest
19 голосов
/ 22 ноября 2010

У меня дилемма.Что лучше всего использовать и почему .. переключиться или если?

switch ($x) 
{
case 1:
  //mysql query 
  //echo something
  break;
case 2:
  //mysql query 
  //echo something
  break;
}

...

if ($x == 1) {
    //mysql query 
    //echo something    
} 

if ($x == 2) {   
    //mysql query 
    //echo something
}  

Ответы [ 6 ]

30 голосов
/ 22 ноября 2010

Они имеют разные значения.

Первый пример остановится, когда условие будет выполнено.

Второй протестирует $x дважды.

Вы можете сделать свой второй if else if. Это будет означать, что блок будет пропущен, как только одно условие оценивается как true .

Но если вам интересно, какой из них самый быстрый, вам следует подумать , какой из них наиболее эффективно передает то, что я хочу сделать . Оба они, скорее всего, в конечном итоге станут условными переходами в целевой архитектуре.

Преждевременная оптимизация ... (остальное вы знаете: P)

7 голосов
/ 22 ноября 2010

Переключение лучше, когда есть более двух вариантов.Это в основном для удобочитаемости кода и удобства сопровождения, а не производительности.

Как уже отмечали другие, ваши примеры не эквивалентны.

5 голосов
/ 13 октября 2011

Оператор switch будет быстрее, поскольку он проверяет значение только один раз.

5 голосов
/ 22 ноября 2010

Первое, что у вас не то же самое

switch(value)
  case condition1:
    break;
  case condition2:
    break

if (condition1) {
}
if (condition2) {
}

Это синонимы

switch(value)
  case condition1:
    break;
  case condition2:
    break

if (condition1) {
}
else if (condition2) {
}

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

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

1 голос
/ 17 октября 2012

оба утверждения являются утверждением принятия решения, сравнивая некоторые параметры и затем показывая результаты.оператор switch, без сомнения, быстрее, чем оператор if, но оператор if имеет большее преимущество перед оператором switch, когда вам приходится использовать логические операции, такие как (<,>, <=,> =,! =, ==),всякий раз, когда вы сталкивались с логическими операциями, вы будете поражены использованием оператора switch, но не беспокойтесь, есть другой способ, который можно использовать для достижения вашей цели, это оператор if, if-else или if-else-ifзаявление.Я рекомендую вам использовать if-else большую часть времени, а не один.

1 голос
/ 22 ноября 2010

Если у вас есть одна переменная, набор возможных значений и вы хотите выполнять различные действия для каждого значения, для этого и нужен ключ переключения.

Операторы Switch делают более очевидным, что вы просто определяете, какое из допустимых значений имеет переменная.

Если вам нужно рассмотреть более сложные условия или несколько переменных, используйте операторы if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...