Loading...

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

NikolayLiubomirov avatar NikolayLiubomirov 82 Точки

Как да изберем правилната условна конструкция (if-else, if-else if или if if)?

Малко съм объркан коя условна конструкция да ползвам в даден случай, понеже обикновено имам три избора (като не включваме switch case). Да вземем за пример първа задача от 4та тема - Complex Conditions. Ето част от възможните избори:

1. If-else (Може би в този случай е малко по-трудно за четене?)

if (gender == "m")
{
    if (age >= 16) { Console.WriteLine("Mr."); }
    else { Console.WriteLine("Master"); }
}
else
{
    if (age >= 16) { Console.WriteLine("Ms.");
    else { Console.WriteLine("Miss"); }
}

2. if-else if (Тук може би се "подсигуряваме"?)

if (gender == "m")
{
    if (age >= 16) { Console.WriteLine("Mr."); }
    else if (age < 16) { Console.WriteLine("Master"); }
}
else if (gender == "f")
{
    if (age >= 16) { Console.WriteLine("Ms."); }
    else if (age < 16) { Console.WriteLine("Miss"); }
}

3. if-if (Това пък въобще не ми харесва laugh)

if (gender == "m")
{
    if (age >= 16) { Console.WriteLine("Mr."); }
    if (age < 16) { Console.WriteLine("Master"); }
}
if (gender == "f")
{
    if (age >= 16) { Console.WriteLine("Ms."); }
    if (age < 16) { Console.WriteLine("Miss"); }
}

Да не говорим пък и за комбинации и от тези варианти... Ще се радвам някой да се опита да ми обясни кога, коя връзка да използвам или е абсолютно без никакво значение?

Тагове:
0
Programming Basics 18/03/2017 19:22:20
slls1 avatar slls1 43 Точки

Според мен най оптималният вариант е втория.Третия не ми харесва защото неможе всичко да е вярно.  А за първия в този случаи върши работа но ако има трети вариянт нама да стане.

0
GenadiMihaylov avatar GenadiMihaylov 11 Точки

Здравейте!

Може би най-същественото е, че при конструкция "if - else" се прави проверка само на условието след "if". И ако то е "true", се изпълнява програмата в тялото "if". Ако е "false" - програмата в "else". При всички останали варианти се прави проверка на всички условия.

1
flareset avatar flareset 140 Точки

Изборът зависи от конкретната задача. Логиката на тези условни конструкции не е особено трудна. "if"  - изпълнява нещо си, ако условието е вярно. "else if" - изпълнява нещо си, ако предходното условие (предходните условия) не са верни, а настоящето условие е вярно. "else" - изпълнява нещо си, ако предходното условие (предходните условия) не са верни. В конкретния пример и на мен втория вариант ми се вижда най-удачен, с може би едно "else" накрая да прихване някакви изключения, но не знам дали в условията на тази задача има заложени такива нужди.

0
ThePSXHive avatar ThePSXHive 436 Точки

Основните условни конструкции са if, if/else, и else/if. Всичко останало е вариация по темата, и в повечето случаи, дълбоко - понякога ненужно, като в долния пример - nest-ване.

if (gender == "m")
{
    if (age >= 16) { Console.WriteLine("Mr."); }
    else if (age < 16) { Console.WriteLine("Master"); }
}
else if (gender == "f")
{
    if (age >= 16) { Console.WriteLine("Ms."); }
    else if (age < 16) { Console.WriteLine("Miss"); } // if-a е ненужен, 
}

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

// Ако това условие е вярно, изпълни кодът в съответния блок
if (cond1)
// но ако не е вярно, и в същото време следващото условие е вярно, изпълни кодът в неговия блок
else if (cond2)
// но и ако това условие не е вярно, а следващото е вярно, изпълни него
else if (cond3)
// а ако горните условия не са изпълнени, и си стигнал до тук, изпълни това
else (cond4)
2
04/02/2017 13:18:52
AlucardDracula avatar AlucardDracula 416 Точки
if (gender == "m")
{
    if (age >= 16) { Console.WriteLine("Mr."); }
    else { Console.WriteLine("Master"); }
}
else
{
    if (age >= 16) { Console.WriteLine("Ms.");
    else { Console.WriteLine("Miss"); }
}

1. тука казваме че gender ако е "m" направи това вътре в if-a, ако не това в else-a.

if (gender == "m")
{
    if (age >= 16) { Console.WriteLine("Mr."); }
    else if (age < 16) { Console.WriteLine("Master"); }
}
else if (gender == "f")
{
    if (age >= 16) { Console.WriteLine("Ms."); }
    else if (age < 16) { Console.WriteLine("Miss"); }
}

2 .тука също като по-горния, но разликата е там, че ако следващия else if е грешно т.е. gender не е "f" то просто ще подмине else if-а и няма да направи нищо 

if (gender == "m")
{
    if (age >= 16) { Console.WriteLine("Mr."); }
    if (age < 16) { Console.WriteLine("Master"); }
}
if (gender == "f")
{
    if (age >= 16) { Console.WriteLine("Ms."); }
    if (age < 16) { Console.WriteLine("Miss"); }
}

3. за разлика от по-горните тука имаме 2 различни if-а ! различниса щото ако първия if е правилно програмата ни ще изпълни тоя код след като го изпълни ще стигне на 2рия if и тъй като условието може да е грешно може да го подмине, но проблема е там че ако кажем пак т.е ако кода ни изглежда така:

if (gender == "m")
{
    if (age >= 16) { Console.WriteLine("Mr."); }
    if (age < 16) { Console.WriteLine("Master"); }
}
if (gender == "m")
{
    if (age >= 16) { Console.WriteLine("Ms."); }
    if (age < 16) { Console.WriteLine("Miss"); }
}

тогава то ще влезне и в първия и във втория if, а при някои задачи това може да даде грешка, а при някои да помогне, зависи от условието на задачата :)

 

А за това какво е най-удачно за тази задача е 1., защото имаме само 2 пола - мъжки/женски, разбира се ако не броим и допънителните придобити :) :D

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