Окончательный тест - просто записать оба и сравнить.
Когда switch
лучше
Когда вы сталкиваетесь с ситуацией, которая предпочитает switch
над/ else ladder, ваш код будет выглядеть следующим образом:
if something == 1 {
foo()
} else if something == 2 {
bar()
} else if something == 3 {
baz()
} else {
quux()
}
Как видите, все скобки, повторяющиеся ключевые слова (else
, if
) повторяют операторы ==
и повторяют один и тот же экземпляридентификатор (something
) добавляет кучу шума с очень небольшим значением.Сравните с switch
:
switch something {
case 1: foo()
case 2: bar()
case 3: baz()
default: quux()
}
Когда if
/ else if
/ else
лучше
Вы обнаружите, что пишете переключатель, где переключаемая переменная не 'на самом деле это очень много, но вместо этого у вас есть куча where
предложений, которые проверяют множество несвязанных условий.Сравните:
switch something {
case 1: foo()
case _ where case2_1() || case2_2(): bar()
case _ where case3(): baz()
case _ where case4(): quux()
}
с
if something == 1 || case1() { foo() }
else if case2_1() || case2_2() { bar() }
else if case3() { baz() }
else if case4() { quux() }
Не забывайте о полиморфизме!
По возможности, старайтесь разбить сложную логику переключения на динамические вызовы методовна объекте.Это позволяет вам разделить логику каждого случая на отдельный класс, где можно сгруппировать всю связанную логику.