Difference between revisions of "Parameters/es"

From Lazarus wiki
m
m (Text replace - "delphi>" to "syntaxhighlight>")
Line 7: Line 7:
 
   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:
 
   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:
  
<delphi> procedure Nombre (lista_formal_parámetros);</delphi>
+
<syntaxhighlight> procedure Nombre (lista_formal_parámetros);</syntaxhighlight>
  
 
&nbsp;&nbsp;&nbsp;La lista de parámetros puede consta de varios grupos de parámetros, separados por punto y coma ('';''):
 
&nbsp;&nbsp;&nbsp;La lista de parámetros puede consta de varios grupos de parámetros, separados por punto y coma ('';''):
  
<delphi> param_grupo_1; param_grupo2; ... ; param_grupoN</delphi>  
+
<syntaxhighlight> param_grupo_1; param_grupo2; ... ; param_grupoN</syntaxhighlight>  
  
 
&nbsp;&nbsp;&nbsp;Cada grupo de parámetros tiene la forma:
 
&nbsp;&nbsp;&nbsp;Cada grupo de parámetros tiene la forma:
  
<delphi> identificador_1, identificador_2, ... , identificador_N : tipo_de_datos</delphi>
+
<syntaxhighlight> identificador_1, identificador_2, ... , identificador_N : tipo_de_datos</syntaxhighlight>
  
 
&nbsp;&nbsp;&nbsp;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.
 
&nbsp;&nbsp;&nbsp;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.
  
<delphi> procedure Nombre (a, b : integer; c, d : real);
+
<syntaxhighlight> procedure Nombre (a, b : integer; c, d : real);
 
  begin
 
  begin
 
   a := 10;
 
   a := 10;
 
   b := 2;
 
   b := 2;
 
   writeln (a, b, c, d)
 
   writeln (a, b, c, d)
  end;</delphi>
+
  end;</syntaxhighlight>
  
 
&nbsp;&nbsp;&nbsp;Pongamos que llamas el procedimiento anterior desde el programa principal de esta forma:
 
&nbsp;&nbsp;&nbsp;Pongamos que llamas el procedimiento anterior desde el programa principal de esta forma:
  
<delphi> alfa := 30;
+
<syntaxhighlight> alfa := 30;
  Nombre (alfa, 3, 4, 5);</delphi>
+
  Nombre (alfa, 3, 4, 5);</syntaxhighlight>
  
 
&nbsp;&nbsp;&nbsp;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.
 
&nbsp;&nbsp;&nbsp;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.
Line 37: Line 37:
 
&nbsp;&nbsp;&nbsp;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''':
 
&nbsp;&nbsp;&nbsp;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''':
  
<delphi> var identificador_1, identificador_2, ... , identificador_N : tipo_de_datos</delphi>
+
<syntaxhighlight> var identificador_1, identificador_2, ... , identificador_N : tipo_de_datos</syntaxhighlight>
  
 
&nbsp;&nbsp;&nbsp;En este caso, constantes y literales no pueden usarse como parámetros actuales porque deben poder ser modificados en el procedimiento.
 
&nbsp;&nbsp;&nbsp;En este caso, constantes y literales no pueden usarse como parámetros actuales porque deben poder ser modificados en el procedimiento.
Line 43: Line 43:
 
&nbsp;&nbsp;&nbsp;Este es un ejemplo que conjuga ''llamada-por-valor'' y  ''llamada-por-referencia'':
 
&nbsp;&nbsp;&nbsp;Este es un ejemplo que conjuga ''llamada-por-valor'' y  ''llamada-por-referencia'':
  
<delphi>...
+
<syntaxhighlight>...
 
  procedure Nombre (a, b : integer; var c, d : integer);
 
  procedure Nombre (a, b : integer; var c, d : integer);
 
  begin
 
  begin
Line 55: Line 55:
 
   delta := 30;
 
   delta := 30;
 
   Nombre (alfa, 2, gamma, delta);
 
   Nombre (alfa, 2, gamma, delta);
  end.</delphi>
+
  end.</syntaxhighlight>
  
 
&nbsp;&nbsp;&nbsp;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.
 
&nbsp;&nbsp;&nbsp;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.

Revision as of 15:50, 24 March 2012

български (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