Операторы switch / case обычно бывают быстрее на 1 уровень, но когда вы начинаете входить в 2 или более, операторы switch / case начинают в 2-3 раза дольше, чем вложенные операторы if / else.
В этой статье приводятся некоторые сравнения скоростей , выделяющие различия в скорости, когда такие операторы вложены.
Например, согласно их тестам, пример кода, подобный следующему:
if (x % 3 == 0)
if (y % 3 == 0)
total += 3;
else if (y % 3 == 1)
total += 2;
else if (y % 3 == 2)
total += 1;
else
total += 0;
else if (x % 3 == 1)
if (y % 3 == 0)
total += 3;
else if (y % 3 == 1)
total += 2;
else if (y % 3 == 2)
total += 1;
else
total += 0;
else if (x % 3 == 2)
if (y % 3 == 0)
total += 3;
else if (y % 3 == 1)
total += 2;
else if (y % 3 == 2)
total += 1;
else
total += 0;
else
if (y % 3 == 0)
total += 3;
else if (y % 3 == 1)
total += 2;
else if (y % 3 == 2)
total += 1;
else
total += 0;
завершено за половина времени, которое потребовалось для выполнения эквивалентного оператора switch / case:
switch (x % 3)
{
case 0:
switch (y % 3)
{
case 0: total += 3;
break;
case 1: total += 2;
break;
case 2: total += 1;
break;
default: total += 0;
break;
}
break;
case 1:
switch (y % 3)
{
case 0: total += 3;
break;
case 1: total += 2;
break;
case 2: total += 1;
break;
default: total += 0;
break;
}
break;
case 2:
switch (y % 3)
{
case 0: total += 3;
break;
case 1: total += 2;
break;
case 2: total += 1;
break;
default: total += 0;
break;
}
break;
default:
switch (y % 3)
{
case 0: total += 3;
break;
case 1: total += 2;
break;
case 2: total += 1;
break;
default: total += 0;
break;
}
break;
}
Да, это элементарный пример, но он иллюстрирует суть.
Таким образом, можно сделать вывод об использовании switch / case для простых типов, которые имеют глубину только на один уровень, но для более сложных сравнений и нескольких вложенных уровней используйте классические конструкции if / else?