Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

milkokochev avatar milkokochev 10 Точки

[Technical Issue] C# Basics - "if" или "else if"

Здравейте колеги,

докато проверчвам домашни, все по често си задавам въпроса "кое определя използването на "else if" вместо само "if"? "

Пример - по-долу са използвани само if-ове. Каква е разликата с else if-овете в случая?

if (a > b && a > c && a > d && a > e)
{
Console.WriteLine(a);
}

if (b > a && b > c && b > d && b > e)
{
Console.WriteLine(b);
}

if (c > a && c > b && c > d && c > e)
{
Console.WriteLine(c);
}

Тагове:
0
Programming Basics

При else if ако нещо по веригата бъде изпълнено другите няма да бъдат, докато при if е възможно всичко да се изпълни.

П.С. В случая резултатът ще бъде еднакъв понеже няма как 2 числа да са едновременно по-големи от останалите, но принципът е такъв.

1
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

При използването на if-else винаги се изпълнява само един if, докато при използването на отделни if-ове се минава през всички проверки и така може да се изпълни кода в тялото на няколко if-a. При използването на if-else може да се проверят всички възможни комбинации от проверки, като условието на всеки else-if ще е доста по-кратко. Погледните примерно това ми решение на една от задачите: 

06. TheBiggestOf5Numbers

Така реализирана задачата със всеки следващ else - if намалявам броя на проверките в условието, защото всеки else-if е обвързан с предишните проверки. Горната задача ако се използват само if-ове (без инициалзизиране на допълнителна промевлива max...) трябва да се реализира със следните 5 if-a:

if (a >= b && a >= c && a >= d && a >= e)

if (b >= a && b >= && b >= d && b >= e

if (c >= a && c >= b && c >= d && c >= e)

if (d >= a && d >= b && d >= c && d >= e)

if (e >= a && e >= b && e >= c && e >= d)

И понеже ако максималното число се срещне повече от един път, то програмата ще го принтира на конзолата повече от 1 път. За да се избегне това трябва в 5-те if-a да се използва return; Лично на мен такова решение не ми харесва особено. 

Предполагам примерите, които си дал, са от същата задача за намиране на най-голямото число от 5 числа. С използването на > в твоите примери програмата няма да работи коректно, когато максималното число се среща повече от 1 път, т.е. няма да принтира нищо на конзолата.

0
gudov avatar gudov 274 Точки

Ако има if за край на проверката се взима else-a - демек, ако има 5 if-a ще се изпълнява всичко възможно за изпълнение, докато не се стигне до else... а ако е с else if и са 5 else if-a, още при първият верен else-if ще се прекрати проверката.

2
Tanina80 avatar Tanina80 11 Точки

Много добре казано - else=край на проверката. Днес го разбрах и аз докато се опитвах да присвоя стойности на две променливи. В момента, в който присвои стойност на първата и спря. Като махнах else и оставих само if-oве си присвои и на двете.

0
Flyer avatar Flyer 150 Точки

Здравейте. Ще дам един пример с код, при който се вижда разликата между двете конструкции.

При серия от if-ове:

int a = 10;

if (a == 10)

{

     a = 20;

     Console.WriteLine("Hello" );

}

if (a == 20)

{

     Console.WriteLine("World");

}

output: Hello World

 

При else if:

int a = 10;

if (a == 10)

{

     a = 20;

     Console.WriteLine("Hello ");

}

else if (a == 20)

{

     Console.WriteLine("World");

}

output: Hello



Тук се вижда, че при else if изпълнението спира веднака щом бъде намерено вярно условие, което е по-оптималния вариант, ако не се търси ефекта в първия пример.

1
RoYaL avatar RoYaL Trainer 6849 Точки

Бих ползвал if/else if ако трябва да извърша нещо, което не влияе на крайния резултат на метода, и всяко от условията на if() не свързано някак си с предходното.

Т.е. при

if (x > 0) {

   // smth

}

 

if (x < 0) {

   // smth

}

 

Няма как да влезе в двете условия. Но, ако сравнявам някакви разнородни неща, за които ми трябва само един резултат:

 

if (userName == "RoYaL") {

   x = 100;

} else if {email == "myEmail@example.com") {

   x = 250;

}

 

В този случай ми трябва precedence. Може да съм с userName == RoYaL && email == myemail@example.comНо тогава ще вляза само в 1вото условие, защото имам elseif. Ако беше IF щеше да влезе и в двете условия.

 

В МНОГО ГОЛЯМА ЧАСТ от случаите, в продъкшън код ми се налага да използват IF за да контролирам изхода на някой метод, тогава избягвам даизползвам изобщо 2ра IF клауза или else if/else.

 

public boolean isMe() {

    if (userNAme == "RoYaL") {

        return true;

    }

    return false;

}

 

1
g.stoyanov avatar g.stoyanov 776 Точки

...if (x > 0) {

   // smth

}

 

if (x < 0) {

   // smth

}

 

Няма как да влезе в двете условия.....

 

 

Да но извършва и двете проверки ;). Което погледнато от към перформънс не е добре :)!

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.