Многие инструменты анализа кода, такие как сонар, выдают ошибки для случая переключения, если они используются вместо нескольких is-else для цикломатической сложности. Есть ли число, которое должно быть порогом того, когда следует использовать if else и когда следует использовать case case? Скажем, если это случай 50, чтобы уменьшить цикломатическую сложность, следует использовать случай переключения? Было бы хорошо, если бы вы могли подтвердить свой ответ примером?
Цикломатическая полнота IF ELSE против SWITCH CASE
Ответы (1)
Чтобы ответить на вопрос другим вопросом.
Вы бы предпочли прочитать:
if(cond1)..
else if(cond2)...
else if(cond50)...
else ...
or
value = map.get(key)
Если существует так много возможных случаев, то ни один переключатель или не кажется подходящим, и поэтому его следует заменить на key-value structure
или state machine pattern
- если ветвление действительно сложное.
Вы можете найти пример реализации здесь:
Что касается того, когда использовать if или switch, имейте в виду, что switch не может принимать следующие типы:
long
, double
, float
, boolean
, поэтому, когда у вас есть такой вход, переключатель, очевидно, не является выбором.
Я бы не стал использовать число в качестве метрики для использования switch
или if statement
. Однако есть одно исключение: если вход может иметь только 2 возможных значения, лучше использовать if. Даже Сонар должен предложить вам это.
Тем не менее, switch
обычно более удобочитаем, чем последовательность операторов if. В качестве важного фактора принятия решения, помимо удобочитаемости, в операторе switch могут быть группы значений, для которых может потребоваться один и тот же путь выполнения. Это в основном более безопасная версия goto
. В отличие от if, где каждый результат обычно привязан к определенному пути выполнения.