Basic Pascal Tutorial/Chapter 4/Parameters/es

From Lazarus wiki
Jump to navigationJump to search

български (bg) English (en) español (es) français (fr) 日本語 (ja) 中文(中国大陆)‎ (zh_CN)

4B - Parámetros

(autor: Tao Yue, estado sin cambios)

   Una lista de parámetros puede incluirse como parte de la cabecera de un procedimiento. La lista de parámetros permite que los valores de la variables sean transferidos desde el programa principal al procedimiento. La nueva cabecera de procedimiento sería:

 procedure Nombre (lista_formal_parámetros);

   La lista de parámetros puede consta de varios grupos de parámetros, separados por punto y coma (;):

 param_grupo_1; param_grupo2; ... ; param_grupoN

   Cada grupo de parámetros tiene la forma:

 identificador_1, identificador_2, ... , identificador_N : tipo_de_datos

   El procedimiento es ejecutado pasándole los argumentos (denominados lista de parámetros actuales) en el mismo número y tipo que la lista formal de parámetros.

 procedure Nombre (a, b : integer; c, d : real);
 begin
   a := 10;
   b := 2;
   writeln (a, b, c, d)
 end;

   Pongamos que llamas el procedimiento anterior desde el programa principal de esta forma:

 alfa := 30;
 Nombre (alfa, 3, 4, 5);

   Al volver al programa principal, ¿cuál es el valor de alpha? 30. El valor de alpha fue asignado a a, a la que se le dió 10 como valor. Lo que ocurre realmente es que alpha y a son completamente distintas. El valor en el programa principal no se ve afectado por lo que ocurre en el procedimiento.

   Esto es lo que se denomina llamada-por-valor (call-by-value). Con esto se pasa el valor de la variable al procedimiento.

   Otra vía de paso de parámetros es llamada-por-referencia (call-by-reference). Esta crea un enlace entre el parámetro formal y el parámetro actual. Al modificar el parámetro formal en el procedimiento el parámetro actual resulta a su vez modificado. La llamada-por-referencia se activa haciendo preceder el grupo de parámetros con var:

 var identificador_1, identificador_2, ... , identificador_N : tipo_de_datos

   En este caso, constantes y literales no pueden usarse como parámetros actuales porque deben poder ser modificados en el procedimiento.

   Este es un ejemplo que conjuga llamada-por-valor y llamada-por-referencia:

...
 procedure Nombre (a, b : integer; var c, d : integer);
 begin
   c := 3;
   a := 5
 end;

 begin
   alfa := 1;
   gamma := 50;
   delta := 30;
   Nombre (alfa, 2, gamma, delta);
 end.

   Inmediatamente tras la ejecución del procedimiento, gamma tiene valor 3, debido a que c es un parámetro por referencia, pero alfa sigue siendo 1 porque a es un parámetro pasado por valor.

   Esto es un poco confuso. Piensa que pasar-por-valor copia la variable y entrega esta copia al procedimiento. El procedimiento trabaja en la copia y la descarta cuando termina. La variable original no es modificada.

   Pasar-por-referencia pasa la variable actual al procedimiento. El procedimiento trabaja directamente con la variable y la devuelve al programa principal.

   En otras palabras, pasar-por-valor transfiere en un único sentido: del programa principal al procedimiento. 'Pasar-por-referencia transfiere en las dos sentidos.

previous contents next