Является оператор switch предпочтительнее за двойное условие и проваливаются, если заявление?


Я обычно использую операторswitch , Когда мне нужно написать несколько операторов условий, часто там, где есть три или более четко определенных условия.

Однако, чтобы обработать двоякодифференцированное утверждение, включая поведение падения , я часто колеблюсь между простымif, else if, else иswitch :

if (condition1)
{
    // handling condition1.
}
else if (condition2)
{
    // handling condition2.
}
else 
{
    // handling fall-through.
}

Или

switch (n)
{
    case condition1:
    // handling condition1.
    break;

    case condition2:
    // handling condition2.
    break;

    default:
    // handling fall-through.
    break;
}

The Wikipedia Switch statement article states :

На некоторых языках и среды программирования, использование оператора case или switch является считается превосходящим эквивалентную серию утверждений if-else потому что это:

  • проще в отладке (например, установка точек останова в коде по сравнению с таблицей вызовов, если отладчик не имеет возможности условной точки останова)
  • легче читать (субъективно)
  • легче понять и поэтому
  • легче поддерживать
  • быстрее потенциал исполнения

О среде выполнения .NET Common Language Runtime, является ли более быстрым потенциалом выполнения оператора switch реалистичным в этом случае ?

Мне любопытно узнать, как среда CLR обрабатывает оба сценария и как один из них предпочтительнее другого.
3 3

3 ответа:

Более быстрый потенциал исполнения означает, что он пытается использовать двоичный поиск, если это возможно (вместо линейного поиска, в случае if... else if...).

Однако if... else if..., как правило, более мощный, так как он может делать то, что switch не может делать.

Поэтому я думаю, что если все, что вам нужно сделать, это сравнить строку или целое число, используйте switch. Это также немного помогает с удобочитаемостью.

Я думаю, что If - это "условие", а Switch - "опция"

Если вы думаете о цели времени компиляции, если условие всегда предпочтительнее. Если условия делают более быструю проверку, то чем случай переключателя.

Но если вы утонете программно, то условие If - это просто серия булевых проверок. Для эффективной работы программы следует использовать корпус коммутатора (хотя он и потребляет много времени).