13. Jos o parametrima i povratnoj vrednosti funkcije. Iako smo se na pocetku dogovorili da nece biti suvog teoretisanja, na ovom casu koji izgleda opravdano nosi broj 13, objasnicemo jos nesto o funkcijama uz pomoc malo vise price a malo manje konkretnih zadataka sa kodom. Neophodno je izloziti ovu materiju, kako bi slika o JSL i njegovim mogucnostima bila potpuna. Zato sada ovo procitajte samo informativno, a kada budete imali malo vise sigurnosti u pisanju skripti, vratite se ovde i pokusajte to bolje rastumaciti. Vec smo videli kako nasa funkcija moze uspesno da nam prosledi svoju povratnu vrednost. Ta povratna vrednost je podatak koji nastaje kao rezultat izvrsenja funkcije. Medjutim, ako bismo hteli funkciju koja je u stanju da utice na vise od jednog podatka, naisli bismo na ogranicenje da funkcija moze imati samo jednu povratnu vrednost. Znamo jos iz prvog primera o funkcijama, da je moguce posluziti se globalnim promenljivama. Tako bismo mogli u funkciji modifikovati , odnosno dodeljivati vrednost proizvoljnom broju globalnih promenljivih i rezultat rada nase funkcije nebi se obledao samo u vrednosti koju nam je funkcija vratila. Medjutim, preterana upotreba globalnih promenljivih utice na to da kod postaje nejasan i tesko je vrsiti njegov razvoj i ispravke. Zamislite da pred sobom imate skript fajl sa stotinama skripti ili funkcija. Ako je jedna globalna promenljiva upotrebljena na vise mesta u skript fajlu, onda promena njene vrednosti na jednom mestu, odnosno u jednoj skripti ili funkciji, moze uticati na rad neke druge skripte ili funkcije. Povecavanjem broja upotrebljenih globalnih promenljivih, kod postaje sve slozeniji, a skripte i funkcije koje su zamisljene kao nezavisni moduli, sve vise gube na svojoj samostalnosti. Ako imamo na umu ogranicenje na samo jednu povratnu vrednost funkcije i argumente protiv preterane upotrebe globalnih promenljivih, postavlja se pitanje kako cemo nasoj funkciji kao programskom servisu poslati podatke na obradu. To se postize posebnim nacinom slanja parametara funkciji. Na proslom casu smo nasoj funkciji slali samu vrednost kao parametar. Ta se vrednost kopirala u parametar funkcije i u telu funkcije je postojala potpuno nezavisno od podatka koji smo upisali u zagradi pri pozivu funkcije. Setite se da se promenljiva u skripti zvala "Cas", a u funkciji "Sat". Iako u funkciji nismo menjali vrednost promenljive Sat, vec je samo uporedjivali, i da smo menjali njenu vrednost, to nebi imalo nikakvog uticaja na vrednost promenljive Cas ciju smo vrednost prosledili funkciji pri njenom pozivu. Medjutim da smo funkciju deklarisali umesto: String Function OdaberiPoruku (int Sat) kao: String Function OdaberiPoruku (int ByRef Sat) lokalna promenljiva Cas iz skripte bila bi u potpunosti izlozena mogucnosti promene u funkciji kojoj smo je prosledili. U zaglavlju ili drugim recima deklaraciji funkcije, u zagradi se izmedju tipa parametra "int" i imena promenljive "Sat" pojavila nova programska rec "ByRef". Kada se parametar navede na ovaj nacin, funkciji se ne salje samo kopija, odnosno vrednost koja se dodeljuje parametru, vec se salje pokazivac memorije koji ukazuje na originalnu promenljivu. To mozete shvatiti ovako: Ako bi parametar funkcije posmatrali kao original neke umetnicke slike, u prvom slucaju funkciji koju mozemo slikovito prikazati kao izlozbu, poslali smo samo reprodukciju. Sta god se na izlozbi dogodilo sa reprodukcijom, original ce ostati netaknut. Medjutim, ako je parametar funkcije deklarisan "ByRef", pri pozivu funkcije, original umetnickog dela je poslat na izlozbu, i mora se prema njemu postupati oprezno jer sve sto se u funkciji desi originalu odrazice se na vlasnika originala, to jest skriptu koja je funkciji poslala original. Svaka dodatna diskusija o nacinu na koji se parametri salju funkcijama, i analiziranje ispravne strategije u slanju parametara, uveliko bi prevazisla okvire u kojima je zamisljeno nase ucenje JSL-a. Zato neka vam ovaj cas posluzi samo kao informacija, kako smo vec na pocetku rekli, da ukoliko u programskom kodu postojecih skripti naidjete na rec "ByRef", znate pravilno da protumacite njeno znacenje. Takodje, kada upotrebite neku od postojecih Jaws-ovih funkcija ciji su parametri definisani na ovaj nacin, znacete da su promenljive koje saljete funkciji pri njenom pozivu kao parametre izlozene promenama koje mogu nastati u samoj funkciji. Ova mogucnost, da neka funkcija direktno menja vrednost promenljivih koje su joj prosledjene kao parametri, pruza sansu funkcijama da ne koriste povratnu vrednost za vracanje aktuelnog podatka, vec da povratnu vrednost svedu na jednu sasvim jednostavnu ali izuzetno vaznu informaciju. Ta informacija nam govori o tome da li je funkcija uspesno izvrsena ili je doslo do neke od gresaka predvidjenih u telu funkcije. Neke od funkcija u svrhu potvrde uspesnog izvrsenja salju broj jedan sto se u Jaws-u poistovecuje sa vrednoscu "true", "tacno ili istina", a nulu vracaju kao "false", "neistina ili netacno". Neke druge funkcije kao indikator problema u izvrsenju, vracaju vrednost minus jedan. Vreme je da napravimo rezime u vezifunkcija, kako biste imali pravilan odnos prema materiji sa zadnjih casova, koji su vam kao pocetniku verovatno zadavali glavobolju i sumnju u to da cete ikada sve ovo shvatiti. Ne ocajavajte! Uskoro cemo poceti sa pisanjem Jaws skripti u svrhu i na nacin kako je to i predvidjeno. Znaci, za prikupljanje i izgovor podataka sa ekrana, kako bismo razne aplikacije ucinili dostupne ljudima sa ostecenim vidom. Vrlo retko ce nam u tu svrhu biti neophodno da kreiramo funkcije. Medjutim, informacije koje smo ovde prikupili o funkcijama, pomoci ce nam da na pravi nacin shvatamo i koristimo dokumentaciju koja nam je dostupna, a odnosi se na stotine Jaws funkcija koje koristimo u pisanju skripti. Na sledecem casu cemo se upoznati sa jos par programskih reci koje srecemo u JSL-u, i nakon toga bi trebalo da za svaku programsku rec koju mozete sresti u JSL-u mozete naci objasnjenje u nasim dosadasnjim casovima. Dakle, moci cete da kazete da razumete jedan programski jezik. Vremenom cete nauciti i da ga govorite. "Lekcija 14." "Skok na sadrzaj "