En Ciències de la computació, un argument o paràmetre és una variable que pot ser rebuda per una rutina o subrutina. Una subrutina usa els valors assignats als seus arguments per alterar el seu comportament en temps d'execució. La major part dels llenguatges de programació poden definir subrutines que accepten zero o més arguments.
Pas d'arguments
Hi ha cinc formes de passar un argument a una funció (subrutina) o procediment: per valor, per referència, per resultat, per valor-resultat i per nom.
Pas per valor
El pas de paràmetres per valor consisteix a copiar el contingut de la variable que volem passar a altres variables dins l'àmbit local de la subrutina, consisteix doncs a copiar el contingut de la memòria de l'argument que es vol passar a una altra adreça de memòria, corresponent a l'argument dins de l'àmbit d'aquesta subrutina. Es tindran dos valors duplicats i independents, de manera que la modificació d'un no afecta a l'altre.
Pas per referència
El pas de paràmetres per referència consisteix a proporcionar a la subrutina a la qual se li vol passar l'argument l'adreça de memòria de la dada. En aquest cas es té un únic valor referenciat (o apuntat) des de dos punts diferents, el programa principal i la subrutina a la qual se li passa l'argument, de manera que qualsevol acció sobre el paràmetre es realitza sobre la mateixa posició de memòria.
Pas per valor resultat
És un tipus poc usat en els llenguatges de programació actuals. Es basa en el fet que dins de la funció es treballa com si els arguments haguessin estat passats per valor però en acabar la funció els valors que tinguin els arguments seran copiats a les variables que pertanyien.
Aquest tipus pot ser simulat en qualsevol llenguatge que permeti el pas de valors per referència de la forma:
void ExempleValorRes(int a1, int a2, int a3) {
int aux1 = a1, aux2 = a2, aux3 = a3;
// codi treballant amb aux1, aux2 y aux3
a1 = aux1; a2 = aux2; a3 = aux3; //Segons el compilador la còpia es realitza en un sentit o en l'altre
}
Tal com indica l'exemple de simulació de valor-resultat, l'ordre de còpia depèn del compilador, la qual cosa implica que aquesta funció pugui donar resultats diferents segons el compilador usat.
Exemple de diferències entre els diferents passos de paràmetres
Aquí s'exposen uns exemples que demostren les diferències d'aquests tipus:
void funció(int a, int b) {
++a;
b += 2;
}
int a = 0;
funció(a, a);
- Arguments passats per valor: a = 0
- Arguments passats per referència a = 3
- Arguments passats per valor-resultat:
- Si el compilador copia els resultats de dreta a esquerra: a = 1
- Si el compilador copia els resultats d'esquerra a dreta: a = 2
Vegeu també
Viccionari