Является оператор 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 ответа:
Более быстрый потенциал исполнения означает, что он пытается использовать двоичный поиск, если это возможно (вместо линейного поиска, в случае
if... else if...
).Однако
if... else if...
, как правило, более мощный, так как он может делать то, чтоswitch
не может делать.Поэтому я думаю, что если все, что вам нужно сделать, это сравнить строку или целое число, используйте
switch
. Это также немного помогает с удобочитаемостью.
Если вы думаете о цели времени компиляции, если условие всегда предпочтительнее. Если условия делают более быструю проверку, то чем случай переключателя.
Но если вы утонете программно, то условие If - это просто серия булевых проверок. Для эффективной работы программы следует использовать корпус коммутатора (хотя он и потребляет много времени).