
В сегодняшней короткой статье я расскажу о некоторых хороших практических правилах, когда следует использовать операторы switch вместо операторов if else и наоборот. Хотя это могут быть не универсальные жесткие правила для каждого проекта кодирования, важно знать плюсы и минусы использования операторов switch и операторов if-else.
Операторы Switch
- Хорошо использовать, если есть только одно условие для сравнения. В приведенном выше примере код нужно сравнивать только с переменной
powerUpID, поэтому использование здесь оператора switch было бы идеальным. - Может дополнительно включать случай
default, где, еслиpowerUpIDне соответствует ни одному из установленных выше случаев, у него будет случай для запуска логики по умолчанию. Поскольку я настроилpowerUpIDкак перечисление типаPowerUpType, мне не нужно беспокоиться о неподдерживаемом случае, поскольку все они будут перечислены через перечислениеPowerUpType.

- Необходимо включить ключевое слово
breakпосле завершения случая, чтобы предотвратить проверку компилятором всех других случаев. - Операторы switch могут поддерживать несколько строк под блоком case и прямо перед ключевым словом
break, но код становится труднее читать. На мой взгляд, именно здесь лучше всего проявляются операторы if-else, поскольку скобки помогают разделить блоки логики на более читаемые фрагменты. Другим вариантом было бы сгруппировать блоки логики в свою собственную вспомогательную функцию, чтобы блок case имел только 1 строку, за которой следует ключевое словоbreak.
операторы if-else
- Хорошо использовать, если есть более 1 условия, которые необходимо выполнить с помощью оператора && (И) или || оператор (ИЛИ).
- Подобно тому, как работает ключевое слово
break, операторelseвыполняется только в том случае, если предыдущий операторifневерен. Другими словами, если первый оператор if в приведенном выше примере верен, компилятор пропустит все остальные операторыelse if. - Недостатком операторов if-else является то, что вам, возможно, придется несколько раз сравнивать одну и ту же переменную с разными значениями. Например, запись
if (powerUpID == PowerUpType.TRIPLE_SHOT)иif (powerUpID == PowerUpType.SPEED_BOOST)может стать повторяющейся для первой половины оператора if, и вместо этого лучше использовать оператор switch, чтобы избежать необходимости писатьif(powerUpID ==несколько раз для разных случаев.
Спасибо за чтение! :)