Sign in Join
Wiki copytemporary

Basic Pascal Tutorial/Chapter 4/Parameters/es: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Basic Pascal Tutorial/Chapter 4/Parameters/es

OldNewLine
1+## 4B - Parámetros
2+
3+(autor: Tao Yue, estado sin cambios)
4+
5+   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:
6+
7+``` pascal
8+ procedure Nombre (lista_formal_parámetros);
9+```
10+
11+   La lista de parámetros puede consta de varios grupos de parámetros, separados por punto y coma (*;*):
12+
13+``` pascal
14+ param_grupo_1; param_grupo2; ... ; param_grupoN
15+```
16+
17+   Cada grupo de parámetros tiene la forma:
18+
19+``` pascal
20+ identificador_1, identificador_2, ... , identificador_N : tipo_de_datos
21+```
22+
23+   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.
24+
25+``` pascal
26+ procedure Nombre (a, b : integer; c, d : real);
27+ begin
28+ a := 10;
29+ b := 2;
30+ writeln (a, b, c, d)
31+ end;
32+```
33+
34+   Pongamos que llamas el procedimiento anterior desde el programa principal de esta forma:
35+
36+``` pascal
37+ alfa := 30;
38+ Nombre (alfa, 3, 4, 5);
39+```
40+
41+   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.
42+
43+   Esto es lo que se denomina **llamada-por-valor** (*call-by-value*). Con esto se pasa el **valor** de la variable al procedimiento.
44+
45+   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**:
46+
47+``` pascal
48+ var identificador_1, identificador_2, ... , identificador_N : tipo_de_datos
49+```
50+
51+   En este caso, constantes y literales no pueden usarse como parámetros actuales porque deben poder ser modificados en el procedimiento.
52+
53+   Este es un ejemplo que conjuga *llamada-por-valor* y *llamada-por-referencia*:
54+
55+``` pascal
56+...
57+ procedure Nombre (a, b : integer; var c, d : integer);
58+ begin
59+ c := 3;
60+ a := 5
61+ end;
62+
63+ begin
64+ alfa := 1;
65+ gamma := 50;
66+ delta := 30;
67+ Nombre (alfa, 2, gamma, delta);
68+ end.
69+```
70+
71+   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.
72+
73+   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.
74+
75+   *Pasar-por-referencia* pasa la variable actual al procedimiento. El procedimiento trabaja directamente con la variable y la devuelve al programa principal.
76+
77+   En otras palabras, *pasar-por-valor* transfiere en un único sentido: del programa principal al procedimiento. 'Pasar-por-referencia'' transfiere en las dos sentidos.
78+
79+| | | |
80+|----|----|----|
81+| [[Basic Pascal Tutorial/Chapter 4/Procedures/es|previous]] | [[Basic Pascal Tutorial/Contents/es|contents]] | [[Basic Pascal Tutorial/Chapter 4/Functions/es|next]] |
82+
83+---
84+*From the Free Pascal wiki, page "Basic Pascal Tutorial/Chapter 4/Parameters/es", as it stood on 2022-08-20 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
85+Category: Castellano
86+Category: Español

Back to history