Ответ 1
Используйте тот, который наиболее читаем в данном контексте.
Существуют ли различия в производительности между операциями if-else и case при обработке нескольких условий?
Что предпочтительнее?
Используйте тот, который наиболее читаем в данном контексте.
В некоторых языках, например, C, switch
, возможно, будет быстрее, потому что он обычно выполняется с помощью таблицы . Современные компиляторы иногда достаточно умны, чтобы использовать их еще для нескольких if
.
И в любом случае это, вероятно, не имеет значения, микро оптимизация (почти) никогда не бывает полезной.
Если у вас более одного 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
В этом случае я настоятельно рекомендую его, потому что он более читабель для других людей.
Некоторые языки программирования ограничивают использование операторов switch
/case
. Например, во многих C-подобных языках значения case
должны быть постоянными целыми числами, известными во время компиляции.
Характеристики эффективности могут различаться между этими двумя методами, но вы вряд ли сможете заранее предсказать, что они собой представляют. Если производительность действительно важна для этого кода в вашем приложении, убедитесь, что у вас профиль оба подхода, прежде чем принимать решение, так как ответы могут вас удивить.
Обычно различия в производительности будут незначительными, поэтому вы должны выбрать наиболее читаемый, понятный и поддерживаемый код, как и в любой другой ситуации программирования.
case
или switch
- это действительно просто особые случаи структур "if.. elseif...", которые вы можете использовать, когда один и тот же объект сравнивается с другим простым значением в каждой ветки, и это все это делается. Самое приятное в их использовании заключается в том, что большинство компиляторов могут реализовывать их как таблицы перехода, поэтому эффективная проверка целых 200 (или даже многих) ветвей может быть реализована как операция индексации одной таблицы и скачок.
По этой причине вы хотите использовать оператор case
, когда вы
Чем больше число "elseif", тем более привлекательным является оператор case
.
Заявления о случаях обычно предпочтительны для читаемости и, как правило, быстрее, если есть разница в скорости, но это не относится ко всем возможным условиям.
Вероятно, вы могли бы написать тест, который показывает, что быстрее для вашей среды, но будьте осторожны с оптимизацией кэширования и компилятора.
Я добавлю некоторые из ответов здесь. Это не вопрос производительности, и если вы действительно обеспокоены производительностью... напишите тест и посмотрите, что быстрее.
Однако это должен быть вопрос о том, что правильно использовать, а не о том, что лучше. Если у вас несколько операторов if/else, сделайте себе одолжение и используйте оператор case. Если это просто, если /else, то используйте if/else. Позднее вы поблагодарите себя.