$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \newcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$
Uvod - Priručnik za JavaScript / Proceduralno programiranje

Proceduralno programiranje

  • Dozvoljeno polaganje
  • -
  • Nema
  • Jovan Popović
  • 2/10/2017

U prethodnim primerima ste videli manje programe u kojima smo stavljali naredbe koje se izvršavaju. Ako biste nastavili da pišete složenije programe i dodajete još naredbi, videli biste da vaši programi postaju sve veći i da je sve teže shvatiti šta koji deo programa radi. Da bi se izbegao ovaj problem, u većim i složenijim programima se grupe naredbi se stavljaju u procedure ili funkcije. Program se sastoji od nekoliko grupa naredbi gde gde svaka grupa ima svoj naziv i radi nešto posebno, kao u sledećem primeru:

Proceduralno programiranje

Svaka od ovih naredbi je u stvari skup drugih naredbi koje zajedno rade nešto:

Naredbe u procedurama

Ovakav način programiranja se zove proceduralno programiranje. Ako ne biste radili ovako i ako biste napisali jedan veliki program u kome su sve ove naredbe, bilo bi teško da vidite koja naredba šta se tu radi.

Procedure (ili funkcije) su specijalne naredbe koje nešto urade kada im to zatražite (tj. kada ih pozovete kako se to kaže u programima). One veoma liče na obične naredbe, ali ona u sebi imaju jednu ili više naredbi koje se zajedno izvrše kada se pozove funkcija.

Na primer, zamislite robota koji ide po pločicama i može da koristi sledeće funkcije:

  1. idi_napred() koja ga pomeri jedan korak napred
  2. okreni_se_ulevo() koja ga okrene ulevo
  3. okreni_se_udesno() koja ga okrene udesno

Zamislite da treba da dovedemo robota sa Lightbot sajta do kraja puta na slici:

Robot koji ide po pločicama

Na desnoj strani vidite uputstva koja treba da prati da bi došao do kraja puta. Ako bismo napisali ove naredbe u programu, on bi izgledao ovako:

idi_napred()
idi_napred()
idi_napred()
okreni_se_udesno()
idi_napred()
idi_napred()
idi_napred()
okreni_se_udesno()
idi_napred()
idi_napred()
idi_napred()

Funkcije mogu u sebi da sadrže i druge naredbe i funkcije. U sledećem primeru vidimo robota koji može da pozove funkciju R1 koja u sebi ima naredbe idi_napred(), idi_napred() i okreni_se_udesno():

Robot koji razume funkcije i procedure

Kad god robot pozove funkciju sa imenom R1() pogledaće koje su naredbe ili funkcije u njoj i izvršiće ih. Ako imamo ovakvu funkciju, možemo da napišemo program malo drugačije:

idi_napred()
R1()
idi_napred()
R1()
idi_napred()
idi_napred()
idi_napred()

Ovaj program je isti kao i prethodni, samo smo umesto naredbi idi_napred() idi_napred() okreni_se_udesno() stavili funkciju R1(). Kad god robot naiđe na ime funkcije R1() on će u stvari da uradi funkcije koje su u njoj.

Zašto funkcije imaju zagrade iza sebe?

Funkcije su slične promenljivama zato što kao i promenljive imaju svoja imena, a mogu i da vraćaju neke vrednosti kao i promenljive i mogu da se koriste kao i promenljive u izrazima. Glavna razlika je u tome kako će vratiti vrednosti:

  • Promenljive su "kutije" u koje možete da stavite neke vrednosti i posle da ih pročitate kada vam trebaju u programu.
  • Funkcije su grupe naredbi koje će nekako izračunati neku vrednost i ta izračunata vrednost će se koristi isto kao da je bila direktno navedena.

Primer funkcije može da bude časovnik. Kada vas zanima koliko je sati pogledaćete u časovnik da bi ste videli tačno vreme. To vreme niste "upisali" u časovnik pa ga posle pročitali. Časovnik ima neki način da odredi koliko je sati i da vam preda tu informaciju. Svaki put kada pogledate u časovnik videćete drugu vrednost. Drugi primeri bi mogli da budu termometri, vage i slično.

Promenljive razlikuju od funkcija po zagradama iza imena. Ako u programu napišete neko ime i iza njega stavite zagrade (), program će znati da to nije promenljiva iz koje može da pročita vrednost, nego da je to neka funkcija koja će da nešto uradi. U sledećem primeru možete videti kako se u promenljivu X mogu upisati ili vrednosti neke promenljive ili se mogu pozvati funkcije koje će odrediti koliko je sati ili koliko je toplo i tu vrednost upisati u promenljivu.

X = promenljiva
X = kolikoJeSati()
X = kolikaJeTemperatura()

Parametri

Parametri su vrednosti koje možete da pošaljete funkciji kada je pozovete. Funkcija "prima" neke vrednosti kada je pozovete, može da uradi nešto sa njima i da vrati neki rezultat:

Funkcija sa tri parametra i izlaznom vrednošću

Na primer rerna je bi mogla da bude primer funkcije. U rernu stavite neku hranu, podesite je i uključite i posle nekog vremena dobijete ispečeno jelo.

U programu možete da pošaljete parametre funkciji tako što ih stavite između zagrada koje se nalaze iza imena. Na primer, zamislite da funkcija ABS() treba da izračuna apsolutnu vrednost nekog broja. Ako između zagrada stavite neki broj ili promenljivu, ova funkcija će uzeti tu vrednost i kao rezultat vratiti njenu apsolutnu vrednost. U sledećem primeru možete da vidite program u kome funkcija računa apsolutnu vrednost broja -10, daje rezultat 10 i onda se ova vrednost upisuje u promenljivu a.

Pozivom funkcije se umesto nje stavlja vrednost koju izračuna

Kada se u programu nađe na ime funkcije, njoj će biti poslate vrednosti parametara i umesto funkcije će se staviti rezultat koji je vratila.