Uslovi i kako ih koristiti

U prethodnom tekstu je objašnjeno kako da se postave pitanja, ali još treba da se na neki način objasni kako se koriste odgovori na ta pitanja u našim programima. Ono što nam je potrebno je da imamo mehanizam koji nam omogućava da uradimo nešto ako je uslov ispunjen a da ne uradimo ako uslov nije ispunjen. Na primer, idemo u šetnju ako je vreme lepo, a ako nije ostaćemo kod kuće.

Da bi mogli da donosimo takve odluke, u programskom jeziku "C" postoje uslovne unstrukcije (engl. conditional instruction) ili uslovni iskazi (engl. conditional statement).

Postoji više varijanti uslovnih instrukcija. Počećemo sa najjednostavnijom, i polako se upoznavati i sa onima koje su složenije. Prvi oblik uslovnih iskaza koji pominjemo:

if(true_or_not) do_this_if_true;

Ovaj uslovni iskaz se sastoji od sledećih elemenata i to isključivo u redosledu koji je zadat:

  • if ključna reč;
  • leva (otvorena) zagrada;
  • izraz (pitanje ili odgovor) čija je vrednost ili "true" (kada je različita od nule) ili "false" (kada je jednaka nuli);
  • desna (zatvarajuća) zagrada;
  • instrukcija (samo jedna, ali ćemo kasnije naučiti kako da zaobiđemo ovo ograničenje).

Kako ovo radi?

Ako je true_or_not izraz koji se nalazi u zagradama tačan (tj. ako mu je vrednost različita od nule), izvršit će se izraz koji se nalazi iza uslov (do_this_if_true);
Ako je true_or_not izraz netačan (vrednost mu je jednaka nuli), izraz koji se nalazi iza uslova se preskače, pa će umesto toga da se izvršava sledeća instrukcija koja se nalazi posle tog uslovnog iskaza.

***

U stvarnom životu ćemo često da koristimo nešto kao:

Ako je lepo vreme otići ćemo u šetnju,
a zatim ćemo da odemo na ručak

Kao što se vidi, u ovom slučaju odlazak na ručak nije uslovna aktivnost i ne zavisi od vremena (na sreću). Pretpostavimo da imamo funkcije bez parametara IdemUShetnju() i IdemNaRucak() možemo da napišemo:

if(VremeJeLepo) IdemUShetnju();
IdemNaRucak();

***

Recimo na primer da će neki učenik da zaspi ako izbroji 120 ovčica. Njegovo spavanje je implementirano posebnom funkcijom LepoSpavaj() koja nema nikakve parametre:

    if(BrojOvaca >= 120) LepoSpavaj();

Čitamo: "Ako je BrojOvaca veći ili jednak 120, tada lepo zaspi!"

***

Ranije je rečeno da može da bude samo jedna naredba posle if. Ako nam je potrebno da izvršimo više od jedne naredbe posle uslova, onda treba da koristimo vitičaste zagrade { i } sa kojima se kreira struktura poznata kao složeni izraz (engl,compound statement) ili, kako to zovemo kraće i jednostavnije, blok. Blok se od strane kompajlera tretira kao jedna instrukcija.

Na ovaj način se rešava problem koji smo imali kada je rečeno da iza if može da stoji samo jedna instrukcija.

Recimo da proširimo naš raniji program:

if( BrojOvaca >= 120){NamestiKrevetd(); IstushirajSe(); LepoSpavaj();
NahraniPsa(); }

***

Sada je vreme za malo stilskih napomena. Pisanje blokova redom, jedan iza drugog je, naravno, sintaksno korektno, ali veoma neelegantno. Moglo bi da dovede do toga da program pređe van granica editora u kojem se piše. Postoji nekoliko stilova koji se koriste prilikom pisanja blokova.

Stil koji se jako često koristi:

if(BrojOvaca >= 120)
{
NamestiKrevet();
IstushirajSe();
LepoSpavaj();
}
NahraniPsa();

Obratite pažnju da je blok koji se uslovno izvršava malo pomeren u desno (indent) - to poboljšava čitljivost programa i jasnije se vidi da je u pitanju uslovni izraz.