7. Grananje na vise uslova i umetanje uslova.

Kada pisemo program, uvek cemo imati konkretnu ideju i zadatak pred sobom. Ono sto tada radimo je pretakanje nase ideje u programski tekst koji razume kompajler. Njegova je briga kako ce to prevesti u masinski kod koji se moze realizovati u praksi. Nase zamisli i zelje najcesce nece biti vezane za donosenje tako jednostavnih odluka kakve smo imali u primeru sa proslog casa. Pogledajmo zato sada kako bismo uveli jos jednu mogucnost u nasu skriptu koja izgovara pozdravnu poruku. 

Script PozdravnaPoruka ()

Var
string Poruka

If SysGetTime ("HH") < 9 then
Let Poruka="Dobro jutro"
SayString (Poruka)

ElIf SysGetTime ("HH") < 18 then
Let Poruka="Dobar dan"
SayString (Poruka)

Else
Let Poruka="Dobro Vece"
SayString (Poruka)
EndIf

EndScript

Trebalo bi da vec znate sta vam je ciniti sa skriptom navedenom iznad. Naravno, kompilirajte je i isprobajte. 

Jedina nova programska rec koju smo upotrebili je "ElIf". To je neka vrsta hibridne reci, napravljene od "Else" i "If", i u ovom kontekstu je njeno znacenje "Ili ako...".
ElIf se navodi jedanput ili vise puta u delu izmedju Then i Else i uloga mu je da postavi vise uzastopnih uslova koji se medjusobno iskljucuju. Ukoliko je upotrebljena i opcionalna rec Else, deo izmedju nje i EndIf ce biti izvrsen u slucaju da nijedan od prethodno navedenih uslova pocevsi od If, nije ispunjen. Kao i kod If-a, tako i svaki ElIf zahteva obavezno Then koji oznacava kraj uslova i pocetak dela koji ce biti izvrsen u slucaju da je uslov ispunjen. Ovaj blok naredbi koje ce biti izvrsene zavrsava se narednim ElIf-om ako postoji ili Else-om takodje ako postoji, i konacno ako nema ni narednog ElIf-a ni Else-a, zavrsava se EndIf-om.

Nas novi primer bi mogao da se iskaze sledecim recima:

Ako je manje od devet sati, reci "Dobro jutro", a ako nije, pogledaj da li je manje od osamnaest sati pa ako jeste reci "Dobar dan", a ako nije ni jedno ni drugo, reci "Dobro vece".

Vazno je da se uoci da ce u nizu blokova izmedju prvog Then i Else, biti izvrsen uvek samo jedan od blokova. U nasem primeru su to samo dva, za dobro jutro i dobar dan, a moze ih biti proizvoljan broj. Uslovi se proveravaju jedan po jedan sve dok se ne naidje na tacan i predje na izvrsenje njegovog bloka a potom  se preskace na prvu sledecu naredbu iza EndIf. Tek ako nijedan od uslova ukljucujuci prvi If i sve ostale ElIf-ove nije tacan, izvrsava se blok koji sledi iza reci Else a ako Else nije upotrebljen, stize se do EndIf-a i nijedan blok ne biva izvrsen a program se nastavlja naredbom koja sledi iza EndIf-a.

U slucaju da vam ovo nije jasno vec odmah, jedino sto treba da uradite je da ulozite malo napora kako bi vam ova struktura postala potpuno jasna. Vrlo brzo cete nauciti da razmisljate na nacin na koji cete pretakati svoje ideje u programske redove.

Kada bismo se u postavljanju uslova zadrzali na onome sto smo na proslom i ovom casu videli, vrlo brzo bismo naisli na realne probleme iz prakse koje nebismo mogli da predstavimo na ovaj nacin. Ukoliko ste sve do sada usvojili i isprobali u praksi, ovo sto sledi bice vam lako, a mogucnosti koje cete dobiti u kombinovanju uslova, zavisice prakticno samo od vase maste. 

Script PozdravnaPoruka ()

Var
string Poruka

If SysGetTime ("HH") < 18 then
;vreme je manje od osamnaest 
If SysGetTime ("HH") < 9 then
;vreme je manje i od osamnaest i od devet
Let Poruka="Dobro jutro"
SayString (Poruka)

Else 
;vreme je manje od osamnaest ali nije manje od devet 
Let Poruka="Dobar dan"
SayString (Poruka)
EndIf ; kraj uslova If vreme manje od devet

Else 
;vreme nije manje od osamnaest
Let Poruka="Dobro Vece"
SayString (Poruka)
EndIf ; kraj uslova If vreme manje od osamnaest.

EndScript


Ovako napisana skripta, u praksi se ponasa potpuno isto kao i ona sa pocetka. Ono sto je novo je upotrebljen ugnezdeni, (nested) uslov jedan unutar drugoga. Setite se da svaki If ima svoj Then i svoj EndIf. U tekstu primera su upisani komentari. Rekli smo da nam za tu svrhu sluzi tackazarez. Ovi komentari treba da vam pomognu u tumacenju uslova napisanih jedan unutar drugoga. Slobodnim recima skripta se moze iskazati ovako:

Pogledaj da li je manje od osamnaest sati pa ako jeste, pogledaj da li je manje i od devet sati, i ako jeste reci "Dobro jutro", a ako nije, reci "Dobar dan", ali ako nije manje od osamnaest sati, kazi odmah "dobro vece".

Imajuci u vidu da se uslovi mogu prakticno neograniceno umetati jedan u drugoga, kao i da se ovaj postupak moze koristiti uz upotrebu Else-a kao i ElIf-a, mogu se kombinovanjem predstaviti veoma slozeni logicki problemi. Vazno je samo da se uslov koji se umece, u potpunosti nalazi unutar drugog uslova, odnosno jednog od njegovih blokova, ukoliko ih ima vise. Takodje je veoma vazno ono sto smo vec ranije rekli da svaki If mora da ima svoj Then i EndIf, a za ElIf vazi isto uz dodatno pravilo da se ElIf moze navesti tek kao drugi uslov nakon prvog koji pocinje sa If. 

Ne smatrajte cudnim, ako vam u prvo vreme komplikovanije logicke strukture izgledaju pomalo strane i nedovoljno jasne. To je sasvim normalno za pocetak. Uz malo vezbe, bice vam lako da izrazite svoje programerske zelje programskim uslovima. Kompajler ce sve redje izgovarati rec Error i vi cete biti spremni za jos jednu programsku strukturu, programsku petlju, a ona ce u vasim rukama pored If uslova, postati mocno oruzje u pisanju skripti.

 "Lekcija 8."


 "Skok na sadrzaj"