Cuando un programa llama a un subprograma, la información se comunica a través de una lista de parámetros o argumentos. La forma más común para realizar este paso de información es utilizando una correspondencia posicional, es decir, que los valores de los parámetros se asignan en el mismo orden en que se pasan.
Por ejemplo, supongamos que tenemos un procedimiento definido del siguiente modo:
procedimiento division (entero dividendo, entero divisor)
...
...
fin_procedimiento
y una llamada a dicho procedimiento desde nuestro programa principal, expresada asi:
division(20, 5)
Los valores 20 y 5, pasados como parámetros al procedimiento división, se asignarán en el orden que se pasan. Es decir, la variable dividendo tomará el valor de 20 y divisor el valor de 5.
Existen diferentes métodos para la transmisión de parámetros a los subprogramas, entre los cuales se cuentan:
- Paso por valor
- Paso por referencia
- Paso por nombre
- Paso por resultado
Los dos primeros son los más frecuentes en la gran mayoría de los lenguajes de programación, por lo que nos vamos a enfocar a explicarlos a detalle.
Paso por valor
Un parámetro es pasado por valor cuando lo que se le pasa al subprograma es una copia del valor de una variable, el cual recibe en una variable local al subprograma, de modo que cualquier operación realizada sobre dicho valor no afectará ni cambiará al valor original. Tomemos, por ejemplo, el siguiente algoritmo:
procedimiento cambiar(entero a, entero b)
var
entero: aux
inicio
aux <- a
a <- b
b <- aux
fin_procedimiento
algoritmo Paso_Por_Valor
var
entero: a, b
inicio
a <- 5
b <- 50
escribir(a, b)
cambiar(a, b)
escribir(a,b)
fin
El algoritmo principal contiene dos variables, cuyos valores son 5 y 50, respectivamente. Luego invoca al procedimiento cambiar, el cual toma una copia de esos valores y los usa en sus operaciones internas. Dentro de dicho procedimiento, la variable a tomará el valor de 5 y la variable b tomará el valor de 50. Las operaciones del procedimiento tienen el objetivo de intercambiar dichos valores por lo que, una vez realizadas, las variables a y b tendrán los valores intercambiados. Pero dado que el procedimiento trabaja con una copia de los datos, las variables originales conservan sus mismos valores. Es decir, cuando volvamos a escribir en pantalla los valores de a y b, veremos los mismos valores que originalmente les asignamos.
Paso por referencia
Ahora bien, cuando pasamos parámetros por referencia, en realidad estamos pasando a un subprograma un indicador o apuntador que señala a la posición de memoria donde se almacena el valor de una variable, de modo que todas las operaciones que se hacen sobre dichos valores dentro del subprograma afectan y cambian a los mismos. En el paso por referencia no se pasa una copia de los datos, sino las referencias a los datos originales. Para indicar que un parámetro está siendo pasado por referencia, utilizamos la palabra reservada var delante de cada uno de los argumentos que especifiquemos en la definición del subprograma.
Observa el ejemplo anterior pero ahora modificado para recibir los parámetros por referencia:
procedimiento cambiar(var entero a, var entero b)
var
entero: aux
inicio
aux <- a
a <- b
b <- aux
fin_procedimiento
algoritmo Paso_Por_Valor
var
entero: a, b
inicio
a <- 5
b <- 50
escribir(a, b)
cambiar(a, b)
escribir(a,b)
fin
Observa que hemos añadido la palabra reservada var delante de cada uno de los parámetros incluidos en la definición del procedimiento. En este caso, todas las operaciones que hacemos dentro del procedimiento cambiar están afectando directamente a los valores originales de a y b, por lo que al ejecutar la segunda instrucción escribir(a,b) del programa principal, veremos que a y b han intercambiado sus valores como resultado de la ejecución del subprograma.
Es importante resaltar que en ambos ejemplos usamos los mismos nombres para las variables tanto en el programa principal como en el procedimiento. Pero eso no siempre tiene que ser así. Si usamos nombres distintos para las variables, pero especificamos que estamos pasando los valores por referencia, las variables en el subprocedimiento apuntarán a las variables originales independientemente de su nombre.
El paso de parámetros más usual y por defecto es el paso por valor. Sin embargo, existen situaciones en las que el paso por referencia es más útil, como en aquellos casos en los que los parámetros contengan una cantidad demasiado grande de información (como un arreglo, de los cuales aprenderemos más adelante).
En los algoritmos que estamos aprendiendo a crear no veremos gran diferencia entre ambos métodos de paso de parámetros, pero es importante conocer que existen para cuando apliquemos nuestros conocimientos a algún lenguaje de programación en particular.
En la siguiente lección, la última de la tercera sección de este curso, aprenderemos uno de los conceptos más extraños y útiles de la programación de computadoras: la recursividad. ¡Hasta la próxima!
Enlace: Índice del curso
0 comentarios:
Publicar un comentario