Beruflich Dokumente
Kultur Dokumente
Uvod u programiranje
Programski kd
Ponimo od samog poetka.
Program, koji se esto naziva izvorni kd (engl. source code) ili samo kd (engl. code) sa
stoji se od skupa specijalnih naredbi koje nalau raunaru koje poslove treba da obavi. Kd
se najee upisuje u tekstualnu datoteku, mada JavaScript omoguava i da kd kucate di
rektno u prozor razvojne konzole itaa veba, to emo opisati uskoro.
5
Skup pravila za ispravne formate i kombinacije programskih naredbi zove se raunar-
ski (programski) jezik, a ponekad i sintaksa jezika slino govornom jeziku ija pravila
opisuju kako se rei pravilno piu i kako se sastavljaju ispravne reenice pomou rei i
znakova interpunkcije.
Programski iskazi
U programskom jeziku, svaka grupa rei, brojeva i operatora koja obavlja konkretan po
sao zove se iskaz (engl. statement). U JavaScriptu, iskaz moe izgledati ovako:
a = b * 2;
Znaci a i b zovu se promenljive (engl. variables) (videti odeljak Promenljive na stra
ni 15), koje su nalik obinim kutijama za uvanje raznih stvari. U programima, promen
ljive sadre vrednosti (kao to je broj 42) s kojima program radi. Zamislite ih kao simbo
lina mesta rezervisana za uvanje samih vrednosti.
Nasuprot tome, 2 je samo po sebi vrednost, koja se zove literal ili literalna vrednost
(engl. literal value) zato to se pojavljuje samostalno i nije smetena u promenljivu.
Znaci = i * su operatori (videti odeljak Operatori na strani 10) oni izvravaju akci
je s vrednostima i promenljivama, kao to je dodeljivanje vrednosti i matematika operaci
ja mnoenje.
Veina iskaza se u JavaScriptu zavrava znakom taka i zarez (;).
Iskaz a = b * 2; grubo opisano, nalae raunaru da uita tekuu vrednost koja je sme
tena u promenljivoj b, da zatim tu vrednost pomnoi sa 2, a onda da dobijeni rezultat
uskladiti u drugu promenljivu koju emo nazvati a.
Programi su samo kolekcije mnogih takvih iskaza, koji svi zajedno opisuju sve korake
koje treba izvriti da bi program obavio ono za ta je namenjen.
Izrazi
Iskazi se sastoje od jednog ili vie izraza (engl. expressions). Izraz ini svaka referenca na
promenljivu ili vrednost, ili na skup jedne ili vie promenljivih ili literala kombinovanih
pomou operatora.
Na primer, iskaz:
a = b * 2;
Izvravanje programa
Kako te kolekcije programskih iskaza nalau programu ta treba da uradi? Programu je
potrebno izvravanje, to se zove i pokretanje programa.
Iskazi kao to je a = b * 2 korisni su za programere dok ih itaju i piu, ali zapravo
nisu u obliku koji raunar moe direktno da razume. Iz tog razloga, na raunaru se ko
risti specijalna pomona alatka (to moe biti interpreter ili kompajler), koja prevodi kd
koji napiete u komande koje raunar razume.
Za neke raunarske jezike, uobiajeno je da se komande prevode odozgo nadole, red
po red, kad god se program izvrava, to se najee zove interpretiranje koda.
Za druge jezike, prevoenje se obavalja pre pokretanja programa, to se zove kompaj-
liranje (ili prevoenje) koda; znai, kada se program zatim pokrene, izvravaju se ve pre
vedene i spremne naredbe.
Uobiajena tvrdnja je da je JavaScript interpretiran jezik zato to se izvorni JavaScript
kd obrauje pri svakom izvravanju. Ali, to nije sasvim tano. Maina (engl. engine) jezi
ka JavaScript zapravo prvo kompajlira a odmah zatim izvrava kompajliran kd.
Vie informacija o kompajliranju JavaScript koda nai ete u prva dva poglavlja
drugog dela knjige Opseg vidljivosti i ograde.
Pokuajte i sami
U ovom poglavlju, svaki programski koncept uvodi se pomou jednostavnih primera
koda, koji su svi napisani na JavaScriptu (razume se!).
Sledee ne moemo istai dovoljno jako: dok napredujete kroz ovo poglavlje a mo
da e trebati da odvojite vreme kako biste ga preli i vie puta trebalo bi da uvebava
te sva tri opisana koncepta tako to ete svojeruno pisati kd. To ete najjednostavnije
uraditi ako otvorite konzolu s razvojnim alatkama u itau veba koji najradije koristite
(Firefox, Chrome, IE itd.).
Pokuajte i sami | 7
Razvojnu konzolu obino otvarate pomou odgovarajue preice s tastature ili
stavke menija. Vie informacija o otvaranju i upotrebi razvojne konzole u vaem
itau veba nai ete u lanku Upotreba razvojne konzole na adresi http://blog.
teamtreehouse.com/mastering-developer-tools-console.
Da biste u konzolu upisali vie redova istovremeno, pritisnite <shift> + <enter>
kako biste preli u sledei prazan red. im pritisnete samo <enter>, konzola e iz
vriti sve to ste upravo otkucali.
b = a * 2;
console.log( b );
Ako prethodni kd upiete u konzolu itaa Chrome, trebalo bi da dobijete neto sli
no sledeem:
console.log( age );
Kao to ste moda i sami pretpostavili, sadraj poruke koju prosledite funkciji
prompt(..) u ovom sluaju, Please tell me your age: (molimo vas da navedete svo
je godine) ispisuje se u iskauem prozoru.
Trebalo bi da to bude neto slino ovome:
Pokuajte i sami | 9
Poto pritiskanjem dugmeta OK prosledite programu ulazni tekst, videete da se
vrednost koju ste otkucali smeta u promenljivu age, iji sadraj zatim ispisujemo pomo
u funkcije console.log(..):
Da bismo se bavili samo jednostavnim stvarima dok uimo osnovne koncepte progra
miranja, primeri u ovom odeljku nee zahtevati ulazne podatke. Ali poto ste sada vide
li kako se koristi funkcija prompt(..), ako elite da sebi postavite izazov, moete pokuati
da koristite i ulazne podatke dok prouavate primere.
Operatori
Operatori odreuju akcije koje izvravamo s promenljivama i vrednostima. Ve smo upo
znali dva JavaScript operatora, = i *.
Operator * izvrava matematiko mnoenje. Sasvim jednostavno, zar ne?
Operator jednakosti = koristi se za dodeljivanje vrednosti prvo se izraunava vrednost
na desnoj strani (izvorna vrednost) operatora = a zatim se ona smeta u promenljivu koju
zadamo na levoj strani (ciljna promenljiva).
Razmotrite sledee:
a = 2;
b = a + 1;
U ovom primeru dodeljujemo vrednost 2 promenljivoj a. Zatim, uitavamo vrednost
promenljive a (koja je i dalje 2), dodajemo joj 1 da bismo dobili rezultujuu vrednost 3,
koju zatim smetamo u promenljivu b.
Mada tehniki gledano to nije operator, rezervisana re var e vam trebati u svakom
programu jer je to primarni nain na koji deklariete (kae se i definiete) promenljive (vi
deti odeljak Promenljive na strani 15).
a = a + 1;
a = a * 2;
console.log( a ) // 42
Sledi nekoliko najuobiajenijih operatora u JavaScriptu:
Dodeljivanje vrednosti
=, kao u a = 2.
Matematiki
+ (sabiranje), (oduzimanje), * (mnoenje) i / (deljenje), kao u a * 3.
Kombinovani s dodeljivanjem vrednosti
+=, -=, *= i /= sloeni su operatori koji kombinuju odreenu matematiku operaciju
s dodeljivanjem vrednosti, kao u a += 2 (isto to i a = a + 2).
Inkrementiranje/dekrementiranje
++ (inkrementiranje), -- (dekrementiranje), kao u a++ (isto to i a = a + 1).
Pristupanje svojstvu objekta
. kao u console.log().
Objekti su vrednosti koje sadre druge vrednosti na odreenim imenovanim mestima
koja se zovu svojstva (engl. properties). obj.a predstavlja vrednost objektnog tipa koja
se zove obj i ima svojstvo ije je ime a. Drugi oblik pristupanja svojstvima je obj[a].
Videti poglavlje 2.
Jednakost
== (labava jednakost), === (striktna jednakost), != (labava razliitost), !== (striktna
razliitost), kao u a == b.
Videti odeljak Vrednosti i tipovi na strani 12 i poglavlje 2.
Poreenje
< (manje od), > (vee od), <= (manje od ili jednako), >= (vee od ili jednako), kao u
a <= b.
Videti odeljak Vrednosti i tipovi na strani 12 i poglavlje 2.
Logiki
&& (i, konjukcija), || (ili, disjunkcija), kao u a || b koji bira a ili b.
Ovi operatori se koriste za izraavanje kombinovanih uslova (videti odeljak Uslovni
iskazi na strani 18), kao a ili b je istinito.
Operatori|11
Znatno detaljnija objanjenja i opise operatora koji ovde nisu pomenuti nai
ete na veb stranici Mozilla Developer Network (MDN), u odeljku Expressi
ons and Operators.
Vrednosti i tipovi
Ako pitate nekog zaposlenog u prodavnici mobilnih telefona koliko kota odreeni ure
aj, a on vam kae devedeset i devet, devedeset i devet (na primer, 99,99 dolara), on vam
zapravo saoptava novani iznos koji treba da platite (plus dabine) da biste ga kupili.
Ukoliko elite da kupute dva takva telefona, lako moete primeniti mentalnu matemati
ku da biste udvostruili tu vrednost i dobili 199,98 kao osnovnu cenu.
Ukoliko taj isti prodavac odabere neki slian telefon i kae da je besplatan (i moda
pri tome oponaa prstima znakove navoda), on vam ne saoptava nikakav iznos, nego samo
drugaiji oblik predstavljanja oekivane cene ($0,00) a to je re besplatno.
Kada zatim pitate da li uz telefon dobijate i punja, odgovor moe biti samo da ili
ne.
Na vrlo sline naine, kada u programu izraavate odreene vrednosti, birate razliite
oblike predstavljanja tih vrednosti u zavisnosti od toga ta nameravate da radite s njima.
Ti razliiti oblici predstavljanja vrednosti zovu se tipovi (engl. types) u terminologi
ji programiranja. JavaScript ima ugraene tipove za svaku od tzv. primitivnih (osnovnih)
vrednosti:
Kada treba da obavite neku matematiku operaciju, koristite tip number.
Kada treba da ispiete neku vrednost na ekranu, koristite tip string (jedan ili vie
znakova, rei ili reenica).
Kada u programu treba da donesete odreenu odluku, koristite tip boolean (true ili
false).
Vrednosti koje se umeu direktno u izvorni kd zovu se literali. Literali tipa string
piu se izmeu navodnika (...) ili polunavodnika (...) jedina razlika je da li vie
volite jedan ili drugi stil. Literali tipa number i boolean samo se navode takvi kakvi su (na
primer, 42, true itd.).
Razmotrite sledee:
I am a string;
I am also a string;
42;
true;
false;
Osim vrednosti tipa string/number/boolean, uobiajeno je da programski jezici stavlja
ju na raspolaganje i nizove, objekte, funkcije i drugo. O vrednostima i tipovima bie znat
no vie rei dalje u ovom poglavlju, kao i u sledeem.
var b = Number( a );
console.log( a ); // 42
console.log( b ); // 42
Prikazana upotreba funkcije Number(..) (ugraena funkcija) predstavlja eksplicit-
nu konverziju proizvoljnog izvornog tipa u tip number. To bi trebalo da je samo po sebi
razumljivo.
Ali, ta se dogaa kada pokuate da poredite dve vrednosti koje izvorno nisu istog
tipa, pa bi bila potrebna implicitna konverzija tipa?
Kada se poredi znakovni niz 99.99 s brojem 99.99, veina ljudi bi se sloila da su te
vrednosti ekvivalentne. Ali one nisu sasvim iste, zar ne? To je ista vrednost predstavlje
na u dva razliita oblika, tj. dva razliita tipa. Moglo bi se rei da su one labavo jedna
ke, zar ne?
Da bi vam olakao reavanje ovakvih uobiajenih situacija, JavaScript se u odree
nim sluajevima sam umea i implicitno pretvara vrednosti u odgovarajue ciljne tipove.
Tako da ako upotrebite operator labave jednakosti == da biste uporedili 99.99 ==
99.99, JavaScript e konvertovati levu stranu 99.99 u njen ekvivalent tipa number, to je
99.99. Poreenje se zatim svodi na 99.99 == 99.99, iji rezultat je, razume se, true.
Uprkos tome to je osmiljena da pomogne, implicitna konverzija tipova moe da vas
zbuni ako niste prethodno odvojili vreme i nauili pravila koja pri tome vae. Poto vei
na JS programera to ne ini, uobiajeno oseanje je da konverzija tipova zbunjuje i uvo
di u programe neoekivane greke, pa bi je zato trebalo izbegavati. Ponekad se ak nazi
va i grekom u dizajnu jezika.
Meutim, implicitna konverzija je mehanizam koji se moe nauiti, tavie, treba da ga
naui svako ko namerava da se ozbiljno bavi programiranjem na JavaScriptu. Ne samo da
vie ne zbunjuje kada savladate njegova pravila, nego moe zapravo i poboljati vae pro
grame! Uloeni trud je vredan rezultata.
Vie informacija o konverziji tipova nai ete u poglavlju 2 ovog dela knjige i u
poglavlju 4 etvrtog dela Tipovi i gramatika.
Vrednosti i tipovi | 13
Komentari u kodu
Prodavac mobilnih telefona moe da napie nekoliko beleaka o odlikama novog mode
la telefona u ponudi ili novim planovima firme za budue ponude. Te napomene su na
menjene samo zaposlenima njih ne treba da itaju kupci. Uprkos tome, te beleke omo
guavaju zaposlenima da lake obavljaju svoje poslove jer je bolje dokumentovano ta i
zbog ega treba da priaju kupcima.
Jedna od najvanijih lekcija koje moete nauiti u vezi s pisanjem koda jeste da on nije
namenjen samo raunaru. Programski kd je u svakom svom deliu namenjen isto toli
ko, ako ne i vie, programeru koliko i kompajleru.
Raunaru je bitan samo mainski kd, to je niz binarnih jedinica i nula, koji se dobija
nakon kompajliranja (prevoenja) izvornog koda. Postoji gotovo beskonaan broj progra
ma koji mogu rezultovati istim nizom nula i jedinica. Odluke koje donosite u vezi s nai
nom na koji piete program imaju svoju teinu ne samo za vas, nego i za druge lanove
razvojnog tima, pa ak i za vas ubudue.
Trebalo bi da piete programe koji ne samo to rade ispravno, nego i izgledaju razumlji
vo kada ih neko prouava. Tome moete mnogo doprineti ako birate dobra imena za pro
menljive (videti odeljak Promenljive na strani 15) i funkcije (videti odeljak Funkcije na
strani 22).
Drugi vaan deo su komentari u kodu. To su kratki tekstovi koji se dodaju u program
iskljuivo kao objanjenja za ljude koji itaju kd (ukljuujui i vas, kao programera). In
terpreter/kompajler uvek zanemaruje te komentare.
Postoje razna miljenja o tome ta ini dobro dokumentovan kd; nije mogue definisa
ti apsolutna i univerzalna pravila. Ipak, pojedine napomene i smernice prilino su korisne:
Programski kd bez komentara nikad nije optimalan.
Previe komentara (na primer, po jedan u svakom redu) verovatno je znak loe napi
sanog koda.
Trebalo bi da komentari objanjavaju zato, a ne ta. Mogu da objanjavaju i kako
ako je ono to je napisano posebno zbunjujue.
U JavaScriptu, mogue su dve vrste komentara: jednoredni i vieredni.
Razmotrite sledee:
// Ovo je jednoredni komentar
/* a ovo je
vieredni
komentar.
*/
Jednoredni komentar (oznaen znakovima //) pogodan je kada nameravate da doda
te komentar neposredno iznad jednog iskaza ili ak na kraj reda. Sve u redu iza znakova
//, do kraja reda, smatra se komentarom (i kompajler ga zato zanemaruje). Nema nika
kvog ogranienja po pitanju toga ta moete napisati u sklopu jednorednog komentara.
console.log( a ); // 42
Jedini element koji se ne moe pojaviti u vierednom komentaru jeste grupa znakova
*/, zato to bi se to tumailo kao kraj komentara.
Trebalo bi svakako da svoje uenje programiranja ponete navikom da komentarie
te programski kd. Poto ete u celom preostalom delu ovog poglavlja videti da koristim
komentare kako bih objasnio odreene stvari, inite to isto u svom kodu. Verujte mi, bie
vam zahvalan svako ko ita va kd!
Promenljive
U veini programa koji rade neto korisno, potrebno je pratiti odreenu vrednost koja se
menja tokom izvravanja programa jer uestvuje u vie operacija potrebnih za poslove
koje program obavlja.
U svom programu, to ete najlake obezbediti ako tu vrednost dodelite odreenom
simbolikom kontejneru koji se zove promenljiva (engl. variable) zato to se vrednost
u tom kontejneru moe tokom vremena menjati, prema potrebama.
U nekim programskim jezicima, promenljivu (kontejner) deklariete tako da uvek sa
dri samo odreen tip vrednosti recimo, number ili string. Statiko odreivanje tipa, po
znato i kao nametanje tipa, uglavnom se navodi kao prednost kad je re o ispravnosti pro
grama, zato to spreava nenamerne konverzije tipova.
U drugim programskim jezicima, tipovi vrednosti smatraju se vanijim od tipova pro
menljivih. Labavo odreivanje tipa, to je poznato i kao dinamiko odreivanje tipa, omo
guava da jedna promenljiva moe u svakom datom trenutku sadrati vrednost proizvolj
nog tipa. To se uglavnom navodi kao prednost kad je re o fleksibilnosti programa, jer
omoguava da ista promenljiva predstavlja vrednost bez obzira na oblik u kojem se ta
vrednost moe nai u svakom datom trenutku logikog toka programa.
JavaScript koristi ovaj drugi pristup, dinamiko odreivanje tipa, to znai da promen
ljive mogu da sadre vrednosti proizvoljnog tipa, bez ikakvog nametanja tipa.
Promenljive|15