Uračunalnom programiranju,naredba povratka uzrokuje izlazak izvođenja iz trenutnogpotprograma i nastavak na mjestu s kojeg je potprogram pozvan - poznatom kaopovratna adresa. Povratna se adresa sprema, obično naprocesovompozivnom stogu, kao dio operacije poziva potprograma. Naredbe povratka u mnogim jezicima dopuštaju funkciji specificiranjepovratne vrijednosti koja se vraćakodu koji je pozvao funkciju.
U jezikuC++,returnizraz;
(pri čemu jeizraz
izraz) jenaredba koja govori funkciji da vrati izvršavanje programa pozivajućoj funkciji, i kaže kolika je vrijednost odizraz
. Ako funkcija nema povratni tip (tj. njezin povratni tip jevoid), naredba povratka se može rabiti bez vrijednosti, u kojem pak slučaju program jednostavno izlazi iz trenutne funkcije i vraća se pozivajućoj.
UPascalu ne postoji naredba povratka. Potprogrami se automatski vraćaju kad izvršavanje dosegne posljednju izvodivu naredbu. Vrijednosti se mogu vratiti dodjeljivanjem identifikatoru koji ima isto ime kao i potprogram (funkciji u Pascalovoj terminologiji).
Određeni programski jezici, kao što suPerl iRuby, dopuštaju programeru izostavljanje eksplicitnih naredbi povratka, na taj način specificirajući da je posljednji evaluirani izraz povratna vrijednost potprograma. Vrijednosti koje vrati program prilikom terminacije hvatajubatch programi.
Naredbe povratka dolaze u mnogo oblika. Sljedeće su sintakse najuobičajenije:
Kao što rabeC,C++,Java,PHP,C#:
return''vrijednost'';
Kao što rabiSmalltalk:
^''vrijednost''
Kao što rabiLisp:
(return''vrijednost'')
Kao što rabiBASIC:
RETURN
Neki razvijatelji i obrazovatelji računalnog programiranja izbjegavaju uporabu eksplicitnih naredbi povratka osim na tekstualnom kraju potprograma, smatrajući da, kad se rabi za "preran povratak", pati od istih problema čitljivosti kao iGOTO naredba. Kao i s GOTO, postoji problem da se u daljnjem razvijanju naredba povratka može previdjeti od strane razvijatelja, te se akcija koja bi se trebala obaviti na kraju potprograma možda neće obaviti (u svim slučajevima).
Međutim, općenito je privaćeno da se naredba povratka ne bi trebalasmatrati štetnom kao GOTO, s obzirom na to da samo dozvoljava skakanje na jedno istaknuto mjesto potprograma te se, kao rezultat toga, rabi sa znatno manjom učestalošću. Štoviše, povratna vrijednost funkcije je obično (u suvremenim popularnim programskim jezicima) eksplicitno specificirana u naredbi povratka.
Također, u jezicima kao što jeJava,try..finally konstrukt se može rabiti za zajamčeno obavljanje akcije na samom kraju potprograma, nakon što je bilo koja naredba povratka izvršena.finally podnaredba će se izvršiti čak i ako je bačenaiznimka (iznimka se automatski hvata, i potom ponovno baca nakon što jefinally podnaredba izvršena, osim akofinally podnaredba i sama ne baci iznimku). U slučaju prikladnog korištenja (npr. za zatvaranje datotečnih ručica), ovo eliminira potrebu za iznalaženjm svih točka izlaska i dodavanja zalihosnih naredbi neposredno prije njih, ili za refaktoriranjem potprograma u svrhu micanja naredbi povratka - i jedan i drugi postupak su skloni grješkama.
Aspektno orijentirano programiranje se može također rabiti za ostvarivanje konstrukta sličnomtry..finally bloku - s ili bez ponašanja automatskog hvaćanja iznimke - iako je izvorno namijenjeno konciznijem izražavanju ponašanja koji "presijecaju" više od jednog potprograma.
|