Используйте тот, который наиболее читается в данном контексте.
В некоторых языках, например в C, переключатель
может быть быстрее, потому что он обычно реализуется с помощью таблицы переходов . Современные компиляторы иногда достаточно умны, чтобы использовать один для нескольких if
, хотя
И в любом случае это, вероятно, не имеет значения, микрооптимизации (почти) никогда не полезны.
Я добавлю сюда некоторые ответы. Это не вопрос производительности, и если вас действительно беспокоит производительность ... напишите тест и посмотрите, какой из них быстрее.
Однако это должен быть вопрос о том, что лучше использовать, а что лучше. Если у вас несколько операторов if / else, сделайте себе одолжение и используйте оператор case. Если это простой if / else, тогда используйте if / else. Вы поблагодарите себя позже.
Если у вас более одного ifelse, я рекомендую переключить / выбрать. Опять же, это не всегда работает.
Предположим, вам что-то в этом роде (не рекомендуется, но только для примера)
If a > 0 and b > 0 then
' blabla
ElseIf b = -5 then
' blabla2
ElseIf a = -3 and b = 6 then
End If
Использование переключателя / выбора - НЕ лучший вариант. Однако при запросе конкретного значения для такой переменной
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
.
Операции по делу, как правило, предпочтительнее с точки зрения читабельности и, как правило, быстрее, если есть разница в скорости, но это относится не ко всем возможным средам.
Скорее всего, можно написать тест, который покажет, какая из них быстрее для вашего окружения, но будьте осторожны с оптимизациями кэширования и компилятора.