Если аргументы vs Case

Существуют ли различия в производительности между операциями if-else и case при обработке нескольких условий?

Что предпочтительнее?

Ответы

Ответ 1

Используйте тот, который наиболее читаем в данном контексте.

Ответ 2

В некоторых языках, например, C, switch, возможно, будет быстрее, потому что он обычно выполняется с помощью таблицы . Современные компиляторы иногда достаточно умны, чтобы использовать их еще для нескольких if.

И в любом случае это, вероятно, не имеет значения, микро оптимизация (почти) никогда не бывает полезной.

Ответ 3

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

Предположим, вы что-то вроде этого (не рекомендуется, но только для примера)

If a > 0 and b > 0 then

' blabla
ElseIf b = -5 then

' blabla2
ElseIf a = -3 and b = 6 then

End If

Использование переключателя /select НЕ является способ перехода. Однако при запросе на конкретное значение для переменной, подобной этой

select case a

        case 1:
           ' blabla
        case 2:
           ' blabla2
        case 3:
           ' blabla3
        case 4:
           ' blabla4
        case else:
end select

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

Ответ 4

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

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

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

Ответ 5

Операторы

case или switch - это действительно просто особые случаи структур "if.. elseif...", которые вы можете использовать, когда один и тот же объект сравнивается с другим простым значением в каждой ветки, и это все это делается. Самое приятное в их использовании заключается в том, что большинство компиляторов могут реализовывать их как таблицы перехода, поэтому эффективная проверка целых 200 (или даже многих) ветвей может быть реализована как операция индексации одной таблицы и скачок.

По этой причине вы хотите использовать оператор case, когда вы

  • может и
  • имеют довольно большое количество ветвей.

Чем больше число "elseif", тем более привлекательным является оператор case.

Ответ 6

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

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

Ответ 7

Я добавлю некоторые из ответов здесь. Это не вопрос производительности, и если вы действительно обеспокоены производительностью... напишите тест и посмотрите, что быстрее.

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