Instrucció de retorn
A la programació d'ordinadors, una instrucció de retorn fa que l'execució abandoni la subrutina actual i es reprengui en el punt del codi immediatament després de la instrucció que va cridar la subrutina, coneguda com la seva adreça de retorn. L'adreça de retorn es desa mitjançant la rutina de crides, avui normalment a la pila de crides del procés o en un registre. Les declaracions de retorn en molts llenguatges de programació permeten que una funció especifiqui un valor de retorn que es retornarà al codi que va cridar la funció.
Visió general
[modifica]En C i C++, return exp ;
(on exp
és una expressió) és una instrucció que diu a una funció que retorni l'execució del programa a la funció de crida i que informi del valor de exp
. Si una funció té el tipus de retorn void, la instrucció de retorn es pot utilitzar sense valor, en aquest cas el programa només surt de la funció actual i torna a la que fa la crida.[1][2] Una sintaxi similar s'utilitza en altres idiomes com Modula-2 [3] i Python.[4]
A Pascal no hi ha cap declaració de retorn. Les funcions o procediments tornen automàticament en arribar a la seva última declaració. El valor de retorn d'una funció es proporciona dins de la funció fent una assignació a un identificador amb el mateix nom que la funció.[5] Tanmateix, algunes versions de Pascal proporcionen una funció especial Exit( exp );
que es pot utilitzar per retornar un valor immediatament des d'una funció o, sense paràmetres, per retornar immediatament des d'un procediment.[6]
Igual que Pascal, FORTRAN II, Fortran 66, Fortran 77 i versions posteriors de Fortran especifiquen valors de retorn mitjançant una assignació al nom de la funció, però també tenen una instrucció de retorn; aquesta instrucció no especifica un valor de retorn i, per a una funció, fa que es retorni el valor assignat al nom de la funció.[7][8][9]
En alguns altres idiomes s'utilitza un paràmetre de sortida definit per l'usuari en lloc de l'identificador de funció.[10] Oberon (Oberon-07) té una clàusula de retorn en lloc d'una instrucció de retorn. La clàusula de devolució es col·loca després de l'última declaració de l'òrgan del procediment. Això permet la comprovació en temps de compilació del retorn adequat i el valor de retorn del procediment.
Alguns llenguatges de programació orientats a expressions, com Lisp, Perl i Ruby, permeten al programador ometre una instrucció de retorn explícita, especificant en canvi que l'última expressió avaluada és el valor de retorn de la subrutina. En altres casos, es retorna un valor nul si no hi ha una declaració de retorn explícita: a Python, el valor None
es retorna quan s'omet la instrucció de retorn,[11] mentre que a JavaScript es retorna el valor undefined
.
A Windows PowerShell, totes les expressions avaluades que no es capturen (p. ex., assignades a una variable, emeses a void o canalitzades a $null) es retornen des de la subrutina com a elements en una matriu, o com un únic objecte en el cas que només hi hagi un objecte. no ha estat capturat.
A Perl, un valor de retorn o valors d'una subrutina poden dependre del context en què es va cridar. La distinció més fonamental és un context escalar on el codi de crida espera un valor, un context de llista on el codi de crida espera una llista de valors i un context buit on el codi de crida no espera cap valor de retorn. Una subrutina pot comprovar el context utilitzant la funció wantarray
. S'utilitza una sintaxi especial de retorn sense arguments per retornar un valor no definit en un context escalar i una llista buida en un context de llista. El context escalar es pot dividir encara més en contextos booleà, nombre, cadena i diversos tipus de referència. A més, un objecte sensible al context es pot retornar mitjançant una seqüència de retorn contextual, amb una avaluació mandrosa dels valors escalars.
Referències
[modifica]- ↑ «return Statement (C)» (en anglès). Microsoft Docs, 25-01-2023.
- ↑ «return Statement (C++)» (en anglès). Microsoft Docs, 03-08-2021.
- ↑ Gleaves, R. Modula-2 for Pascal Programmers (en anglès). Springer, 2012, p. 71. ISBN 9781461385318.
- ↑ Martelli, Alex. Python in a Nutshell: A Desktop Quick Reference (en anglès). 2a edició. O'Reilly Media, 2006, p. 73. ISBN 9781449379100.
- ↑ Scott, Michael L. Programming Language Pragmatics (en anglès). Morgan Kaufmann, 2006, p. 432. ISBN 9780126339512.
- ↑ Flanders, Harley. Scientific Pascal (en anglès). Springer, 2012, p. 35. ISBN 9781461224280.
- ↑ Scott, Michael L. Programming Language Pragmatics (en anglès). Morgan Kaufmann, 2006, p. 432. ISBN 9780126339512.
- ↑ ANSI x3.9-1966. USA Standard FORTRAN (en anglès). American National Standards Institute, p. 14. Arxivat 2011-05-15 a Wayback Machine.
- ↑ ANSI x3.9-1978. American National Standard – Programming Language FORTRAN (en anglès). American National Standards Institute. Arxivat 2013-10-29 a Wayback Machine.
- ↑ Sakkinen, Markku ACM SIGPLAN Notices, 24, 3, 3-1989, pàg. 55–56. DOI: 10.1145/66083.66087.
- ↑ Martelli, Alex. Python in a Nutshell: A Desktop Quick Reference (en anglès). 2a edició. O'Reilly Media, 2006, p. 73. ISBN 9781449379100.