Наредба if¶
У приручнику Увод у програмирање у програмском језику C# погледајте поглавље 3.1 (стране 35-41).
До сада смо већ научили како се пишу логички изрази, посебно они у којима се пореде по величини два нумеричка (целобројна или реална) израза. У приручнику смо видели као се такви изрази могу употребити у наредбама гранања. Поновимо укратко најважније из поглавља 3.1 у приручнику.
Основни облик наредбе if¶
Видели смо да наредба if може да има следећи облик:
if (услов)
{
наредбе1
}
else
{
наредбе2
}
У овом запису реч услов представља било који логички израз, дакле израз чија је вредност логичког типа (тачно или нетачно). Реч наредбе1 представља било који низ наредби које ће бити извршене ако услов има вредност true. Слично томе, реч наредбе2 представља било који низ наредби које ће бити извршене ако услов има вредност false. Низ наредби наредбе1 чине такозвану „да” грану if наредбе, а наредбе2 чине њену „не” грану.
У случају да се неки од ова два низа наредби састоји од само једне наредбе, витичасте заграде око њега могу (а не морају) да се изоставе.
Тако смо у примеру „Два артикла”, у коме се израчунава колико Милица треба да плати за џемпер и панталоне ако добија 50% попуста на јефтинији артикал, уместо
if (pantalone < dzemper)
{
platiti = 0.5 * pantalone + dzemper;
}
else
{
platiti = pantalone + 0.5 * dzemper;
}
или
if (pantalone < dzemper) {
platiti = 0.5 * pantalone + dzemper;
}
else {
platiti = pantalone + 0.5 * dzemper;
}
могли да пишемо и
if (pantalone < dzemper)
platiti = 0.5 * pantalone + dzemper;
else
platiti = pantalone + 0.5 * dzemper;
Најкраћи код којим се променљивој platiti додељује жељена вредност, користи тернарни оператор \(? :\)
platiti = (pantalone < dzemper) ? 0.5 * pantalone + dzemper : pantalone + 0.5 * dzemper;
или
platiti = (pantalone < dzemper) ?
0.5 * pantalone + dzemper :
pantalone + 0.5 * dzemper;
Вредност израза облика услов ? израз1 : израз2
је израз1 ако услов има вредност true, a израз2 ако услов има вредност false. Овде се подразумева да је услов неки израз логичког типа, а израз1 и израз2 су неки изрази међусобно истог типа, најчешће нумеричког.
На овај врло сажет начин записивања кода међу програмерима има доста примедби на рачун читљивости (прегледности), нарочито у случају када се више оваквих израза са тернарним оператором умеће један у други, или су подизрази дуги и компликовани. Зато се препоручује да се употреба ограничи пре свега на једноставне ситуације у којима је намера јасна, на пример
Console.WriteLine(t ? "da" : "ne");
string znak = a < 0 ? "minus" : "plus";
int doprinos = a > 0 ? a : 0;
Има и употреба оператора \(? :\) које су довољно јасне, а које могу да се замене и уграђеним функцијама (које су још јасније):
int maks = a > b ? a : b; // Math.Max(a, b)
int abs_a = a > 0 ? a : -a; // Math.Abs(a)
int rastojanje = a > b ? a - b : b - a; // Math.Abs(a - b)
Напомињемо да је овде реч само о стилу. Сви ови записи су формално исправни, па програми са таквим записима функционишу. Међутим, програми не служе само за комуникацију између вас и рачунара, него и за комуникацију између вас и других програмера. Зато је потребно имати на уму препоруке о томе шта се сматра лако читљивим кодом, а шта не. Када нисте сигурни да ли ваш код постаје криптичан (нејасан, заплетен), можете да питате друга или другарицу колико времена или труда им треба да разумеју шта тај код ради и да ли би им неки други запис био јаснији.
На једноставним задацима који следе после питалица, можете да проверите да ли сте савладали писање if наредбе.