Kurs: - Core JavaScript Programming Materijali vezani uz ovu lekciju: - Test naredbe grananja - Naredbe grananja (PDF dokument) Naredbe granjanja su prve naznake da jedan program stvarno i jeste program. Bez njih, program ne može da uradi mnogo, osim da izvrši neke proste naredbe i operacije i eventualno prikaže nešto na ekranu.
Da bismo u program uneli malo više nelinearnosti i kontrole, potrebno nam je da na neki način odlučimo koje ćemo njegove delove i kada izvršavati. Prvi i osnovni način da to postognemo je upotrebom naredbi grananja, odnosno, kondicionalnim izvršavanjem programa. if elsePrva i osnovna naredba grananja je naredba if. Ova naredba poznata je u praktično svim jezicima i predstavlja baš ono kako se i zove: ako.
Kako reč „ako“, sama za sebe, nema baš mnogo logike u retorici, tako je nema ni u programiranju, već je potrebno da, osim nje, postavimo i neki uslov od koga će zavisiti ishod ove naredbe. Ovaj uslov mora biti smešten u male zagrade, neposredno iza ključne reči if i njegov rezultat mora biti tipa boolean. ...tok programa... U primeru će program, kada dođe do provere uslova, u zavisnosti od ispunjenosti (a u ovom slučaju, uslov je ispunjen, jer je vrednost izraza u uslovu true) strartovati liniju koda, koja sledi nakon uslova. U slučaju da želimo uslovno da startujemo samo jednu liniju koda, ovo je dobro rešenje, ali ako bismo želeli da startujemo uslovno neku veću strukturu, morali bismo da celu tu strukturu smestimo u blok oivičen vitičastim zagradama, za šta bi primer izgledao ovako: ...tok programa... U ovom primeru, blok može biti neograničeno veliki „komad“ koda, pri čemu bi trebalo da obratimo pažnju praktično samo na jednu stvar, a to je, da se taj „komad“ koda, možda nikada neće izvršiti. Zato je potrebno da kompletnu logiku programa napravimo tako da, ni u jednom trenutku, samo izvršenje ne zavisi od uslova, već da on samo utiče na tipove izvršenja. Na primer, ne bi trebalo da deklarišemo neku promenljivu u uslovnom bloku, a da nam ta petlja bude potrebna kasnije, van uslovnog bloka. To u mnogim jezicima dovodi do greške. Skript jezici su imuni na prijavljivanje greške u ovim slučajevima, što ne znači da je dobra praksa kodirati na taj način. Sam uslovni izraz može takođe biti neograničene veličine, sve dok se iz njega može izvući jedan jedini rezultat boolean tipa. Dakle ((a==5) && (b==10)) || ((x!=25) && (c===d)) će dati jedinstven rezultat tipa boolean i kao takav, čini validan izraz u uslovu. Pogledajmo primer: a=10; U primeru, program će očigledno ispisati : a je 10 na stranici sa skriptom. Ali, šta ukoliko bismo želeli da uradimo nešto posebno i kada se uslov ne ispuni. Naravno, mogli bismo postaviti sledeći uslov u kome ćemo proveriti da a nije jednako 10. To će funkcionisati, ali ne u svim slučajevima. Na primer, šta ako se u bloku prvog uslova promeni vrednost i ispuni i drugi uslov. Na primer: a=10; U ovom slučaju, morali bismo da napravimo posebnu logiku koja će obezbeđivati drugi blok od startovanja ukoliko se vrednost u prvom bloku promeni i ispuni uslov za drugi – što bi bilo veoma nepraktično i komplikovano. Umesto toga, postoji ugrađena logika koja to sama radi i prezentovana je ključnom rečju else odnosno else if. Kada bi malopređašnji primer izmenili, tako da izgleda ovako: a=10; dobili bismo baš ono što želimo. Uslov koji čak neće biti ni proveren, ukoliko je prethodni uslov ispunjen. Ono što je takođe bitno jeste da možemo proveravati „alternativne“ uslove naredbom else if neograničen broj puta. I naravno, pri tom, ne moramo voditi računa o tome da li su se neki od uslova preklopili, jer o tome vodi računa sam programski jezik (interpreter). Na kraju, možemo postaviti i bezuslovni alternativni kod, koji će se izvršiti ukoliko se baš ni jedan uslov ne ispuni, tako što ćemo upotrebiti samo ključnu reč else, bez uslova. a=5; Ovim smo zatvorili set uslova i ne možemo ići dalje sa uslovima (u okviru ovog seta), jer će neki od blokova sigurno biti startovan. Switch casePrethodni način uslovljavanja izvršavanja nekog bloka koda je dobar ali, ne naročito elegantan, kada dođe do veće količine else alternativa, pa se za slučajeve gde ima više alternativa, koristi nešto preglednija switch case struktura.
Evo kako bi izgledao prethodni primer, korišćenjem switch case strukture: a=5; U primeru razlikujemo nekoliko elemenata. Nakon inicijalizacije vrednosti (a=5), ubacujemo a kao parametar u switch strukturu. Ključnim rečima case inicijalizujemo uslov (vrednost sa kojom želimo da poredimo ulaznu vrednost (u ovom slučaju a)). Nakon dvotačke, počinje alternativni blok, koji traje sve dok ga ne prekinemo ključnom rečju break. Za slučaj da želimo alternativu, koja će biti izvršena ukoliko ni jedan uslov ne bude ispunjen, koristimo ključnu reč default, nakon koje sledi takođe blok. U ovakvu strukturu možemo staviti neograničen broj slučajeva (case) i prilagođenija je za brze provere sa velikim brojem slučajeva i kratkim blokovima koda. Kada se radi sa većim blokovima, switch case gubi na preglednosti i obično se koriste druga rešenja (if else). Ternarni operatorJoš jedan način za kontrolu toka, zapravo, više kontrolu vrednosti promenljivih je i ternarni operator.
Pogledajmo sledeći kod: a=10; Očigledno je šta ovaj kod radi - dodeljuje vrednost 10 promenljivoj a, zatim proverava da li je a 10. Ako jeste, dodeljuje promenljivoj b vrednost promenljive a, a ako nije, dodeljuje promenljivoj b vrednost 150. Na kraju, emituje vrednost promenljive b na stranu. Ovaj primer je validan i radiće bez problema. Ali, moguće ga je drastično skratiti, uz pomoć ternarnog operatora. Evo primera: a=10; Ovaj program, iako višestruko kraći, daje identičan rezultat sledećem. Analizirajmo drugu liniju (koja zamenjuje ceo if else blok iz prethodnog primera): b= Običan operator dodeljivanja. Vrednost desne strane biće dodeljena promenljivoj sa leve. (a==10) Uslov relevantan za odluku o alternativi: ? a : 150; AlternativeIza znaka pitanja (a) je alternativa koja će biti uzeta u obzir ukoliko je uslov ispunjen, a iza dvotačke (150) je alternativa u slučaju da uslov ne bude ispunjen.
Tako se na kraju dobije nešto nalik na: dodeli promenljivoj b (ako je a jednako 10) vrednost a u suprotnom, vrednost 150 b = (a==10) ? a : 150;
Ovakva poređenja korisna su kada hoćemo da dodelimo podrazumevane vrednosti promenljivima ukoliko nisu inicijalizovane, ali o tome više u funkcijama. b=(a!=null) ? a : 120; Najvažnije iz lekcije
Vežba 1Problem: Postoji sledeći program: var ifr = document.createElement("iframe"); var url = window.location.href; //OVDE JE POTREBNO DODATI KOD document.body.appendChild(ifr);
var ifr = document.createElement("iframe"); var url = window.location.href;
Vežba 2Problem: JavaScript program prihvata promenljivu adresaSlike i na osnovu nje kreira sliku koju postavlja na stranu. Potrebno je proveriti ekstenziju unete promenljive i ukoliko je png ili jpg, dodeliti promenljivu src svojstvu objekta img. U suprotnom, potrebno je postaviti svojstvo src img objekta na vrednost: http://www.google.com/intl/en_ALL/images/srpr/logo1w.png var adresaSlike = "http://www.google.com/intl/en_ALL/images/logos/images_logo_lg.gif";
var adresaSlike = "http://www.google.com/intl/en_ALL/images/logos/images_logo_lg.gif"; var parts = adresaSlike.split("/"); if(ext == "jpg" || ext == "png") img.style.position="absolute";
|
Smatrate da je ova lekcija korisna? Preporučite je. | Broj preporuka:1 |