2009-10-07 2 views
1

Зачем вам использовать инструкции if-else, если вы можете сделать другое заявление if?Зачем использовать if-else, если в C++?

Пример с несколькими IFS:

input = getInputFromUser() 
if input is "Hello" 
    greet() 

if input is "Bye" 
    sayGoodbye() 

if input is "Hey" 
    sayHi() 

Пример с еще-если:

input = getInputFromUser() 
if input is "Hello" 
    greet() 

else if input is "Bye" 
    sayGoodbye() 

else if input is "Hey" 
    sayHi() 
+16

Я был под впечатлением, что вопросы, связанные с программированием были разрешено здесь * независимо от уровня, на котором они были *. Это может показаться основным вопросом для многих из нас, но я не понимаю, почему это считается «не реальным вопросом». – paxdiablo

+0

@litb - меньшее количество ключевых слов, но более сложные условия - условия должны явно исключать то, что иначе было бы исключено для вас. Предполагая, что другое было уместно, в итоге вы получите больше слов, цифр и символов. – Steve314

+2

Не только это, но и то, зависит ли оно от того, что вы выполняете как тело первой ветви. Вы можете изменить переменные условия ... Я думаю, что для флага, используемого в этом состоянии, обычно используются флаги, например –

ответ

8

вы имеете в виду, как это:

if (a == true && b == false && c == 1 && d == 0) { 
    // run if true 
} 

if (a == false || b == true || c != 1 || d != 0) { 
    // else 
} 

еще-заявление было бы гораздо яснее и легче поддерживать.

+1

И менее подвержен ошибкам. Ваши два утверждения не являются идеальными противоположностями - вам нужно изменить '&&' на '||' во втором. –

+5

Наконец, вы попросите процессор выполнить ту же работу дважды. –

+0

@ Крис Лутц, нашел ошибку и исправил ее примерно в то же время, что и вы :-) –

7

Если вам нужно выбрать точно одно действие от заданного набора действий, в зависимости от некоторых условий естественным и наиболее понятным выбором является либо переключатель (не забудьте сломать после каждой ветки), либо комбинацию if и остальное. Когда я пишу

if (conditon1) 
{ 
    action1(); 
} 
else if (condition2) 
{ 
    action2(); 
} 
else if (conditon3) 
{ 
    action3(); 
} 
. 
. 
. 
else { 
    action_n(); 
} 

для читателя ясно, что необходимо выполнить одно из действий. И нет никакой возможности, что из-за ошибки в условиях выполняется более одного действия.

13

Он также более совершенен.

В вашем первом примере каждый, если будет проверен, даже если вход «Hello». Таким образом, у вас есть все три проверки.

В вашем втором примере выполнение остановится после того, как оно обнаружит ветку, поэтому, если пользователь наберет «Hello», это будет только одна проверка вместо трех.

Разница может быть не очень проста в вашем простом примере, но представьте, что вы выполняете потенциально дорогостоящую функцию, и вы можете увидеть разницу.

14

Если у вас есть неисключительное условие:

if(a < 100) 
{...} 
else if (a < 200) 
{...} 
else if (a < 300) 
.... 

это очень отличается от той же коды без «Else» с ...

Смежные вопросы