9. Dodajmo jos malo logike uslovima. Do sada smo u postavljanju uslova, koristili pojedinacne uslove koji su se sastojali od uporedjivanja dva broja. Sada cemo videti kako se uslovi mogu kombinovati logickim operatorima. Pogledacemo nekoliko primera. Script PozdravnaPoruka () Var string Poruka If (SysGetTime ("HH") > 7) && (SysGetTime ("HH") < 15) then Let poruka = "Prijatan posao" SayString (Poruka) Else Let poruka = "Prijatan odmor" SayString (Poruka) EndIf EndScript Skripta izmedju 7 i 15 sati izgovara jednu, a pre ili posle tog intervala, drugu poruku. Izmena se nalazi u redu: If (SysGetTime ("HH") > 7) && (SysGetTime ("HH") < 15) then Kompletan uslov koji se nalazi izmedju If i Then: (SysGetTime ("HH") > 7) && (SysGetTime ("HH") < 15) sastoji se iz dva uslova: (SysGetTime ("HH") > 7) i (SysGetTime ("HH") < 15) povezana logickim operatorom "i", koji se u JSL-u oznacava dvostrukim "and" znakom, "&&". Uslovi su stavljeni u zagrade, a kompletan uslov povezan logickim operatorom &&, postaje tacan, ispunjen, ukoliko su tacni, ispunjeni i jedan i drugi uslov koje smo povezali. Ako jedan ili oba od uslova nisu tacni, onda i citav uslov nije tacan. Nas uslov slobodnim recima bi se mogao reci: Ako je sat veci od sedam i sat manji od petnaest, onda... Uslov je postao malo glomazan pa mozemo uvesti jednu int, celobrojnu promenljivu u koju cemo smestiti aktuelni broj sati, kada on jednom bude procitan. To ce izgledati ovako: Script PozdravnaPoruka () Var string Poruka, int Sat Let Sat = StringToInt (SysGetTime ("HH")) If Sat > 7 && Sat < 15 then Let poruka = "Prijatan posao" SayString (Poruka) Else Let poruka = "Prijatan odmor" SayString (Poruka) EndIf EndScript Ne zaboravite da iza prvog imena promenljive stavite zarez, sto cete uvek ciniti kada dodajete novu promenljivu. Takodje ne zaboravite da iza poslednje ne sme stajati zarez. U redu gde nasoj promenljivoj dodeljujemo vrednost: Let Sat = StringToInt (SysGetTime ("HH")) upotrebili smo jos jednu Jaws-ovu funkciju: StringToInt koja ima jedan string parametar: SysGetTime ("HH") Do sada smo string podatak koji nam daje ova funkcija, precutno poredili sa celobrojnom vrednoscu. Poredjenja su bila uspesna jer kompajler u odredjenim situacijama pogadja sta smo hteli, ali je ovo losa programerska praksa i ne treba se na nju oslanjati. Namece se jedno pitanje: Kako znamo da ce nam funkcija SysGetTime podatak o satu servirati kao string niz od cifara, a ne kao celobrojnu vrednost, integer? Kada zelimo da upotrebimo neku funkciju, moramo se prethodno upoznati sa njenim karakteristikama. To su, ukoliko ih ima, broj parametara koji se mora proslediti funkciji kao i tip tih parametara. Takodje je potrebno znati da li funkcija ima povratnu vrednost i koji je tip te povratne vrednosti. Tako nasa funkcija za vreme ima kao povratnu vrednost string. Posto zelimo da ovu vrednost poredimo sa brojem koji navodimo u uslovu, upotrebicemo StringToInt funkciju koja uzima ovu vrednost kao svoj jedini parametar, i transformise je u broj. Ovo vam moze liciti na presipanje iz supljeg u prazno, ali nije tako. Zapamtite da je na primer: "18" samo niz od dva znaka i to jedinice i osmice. Ove znake treba posmatrati na isti nacin kako bismo ih posmatrali da se radi o slovima. Za razliku od toga: 18 je broj osamnaest u svom pravom znacenju. Treba uociti da je broj osamnaes prvi put naveden u navodnicima a drugi put ne. Tako je u redu: Let Sat = StringToInt (SysGetTime ("HH")) celobrojna promenljiva Sat dobila odgovarajucu takodje celobrojnu vrednost koja se dobija kao povratna vrednost funkcije StringToInt. Potom je ta promenljiva upotrebljena u nasem uslovu: If Sat > 7 && Sat < 15 then koji je postao dosta pregledniji. Ne treba da vas plasi sva ova zbrka sa funkcijama, njihovim parametrima i povratnim vrednostima, jer ce ove stvari uz nekoliko upotrebljenih funkcija na primerima, postati krajnje jednostavne i logicne. Mozemo uraditi jos jednu malu korekciju nase skripte. Posto u If EndIf, bloku jedino zelimo da odaberemo odgovarajucu poruku, mozemo da je izgovorimo tek nakon ovog bloka, tako da ce biti navedena samo jedamput. Script PozdravnaPoruka () Var string Poruka, int Sat Let Sat = StringToInt (SysGetTime ("HH")) If Sat > 7 && Sat < 15 then Let poruka = "Prijatan posao" Else Let poruka = "Prijatan odmor" EndIf SayString (Poruka) EndScript Pored logickog operatora "i", (&&), u JSL-u postoji i "ili", (||), operator koji nam sluzi da povezemo dva uslova tako da je kompletan uslov tacan ukoliko je bar jedan od povezanih uslova tacan. Tako nasu skriptu mozemo napisati: Script PozdravnaPoruka () Var string Poruka, int Sat Let Sat = StringToInt (SysGetTime ("HH")) If Sat < 7 || Sat > 15 then Let poruka = "Prijatan odmor" Else Let poruka = "Prijatan posao" EndIf SayString (Poruka) EndScript Ovaj put je nas uslov If Sat < 7 || Sat > 15 then iskazan obicnim recima postao: Ako je sat manji od sedam ili veci od petnaest. Treba uociti da je sada uslov tacan ukoliko je sat u bilo kom od dva navedena intervala, i da smo u skladu sa tim zamenili mesta u blokovima za nase poruke. Pregledajte pazljivo sve sto smo na ovom casu radili, i ako se umorite od sveg ovog premetanja redova, znajte da u JSL-u, gotovo da i nema vise nicega radikalno novog sto biste trebali nauciti. Ali zato, kada jednom usvojite neke programerske pojmove i principe, mnogi drugi programski jezici ce vam postati mnogo razumljiviji i blizi. "Lekcija 10." "Skok na sadrzaj"