|
|
|
|
|
|
CarlosPes.com
> Curso
de Diseño de Algoritmos
> Declaraciones Locales y Globales |
|
Declaraciones Locales y Globales
|
|
|
|
|
¿Qué
diferencias hay entre declaraciones locales y globales?
|
|
» Declaración
de Subprogramas |
|
Las
declaraciones de variables, constantes y tipos de datos realizadas en
un subprograma (submódulo) se dice que son declaraciones
de
ámbito local, es decir, dichas variables,
constantes y tipos
de datos, sólo pueden utilizarse en dicho subprograma.
Por el contrario, las declaraciones realizadas en el programa
(módulo) principal, se dice que son declaraciones
de
ámbito global, es decir, las variables,
constantes y tipos
de datos declarados en el programa principal, pueden utilizarse en el
programa principal y en todos los subprogramas.
En los procedimientos propuestos para resolver el problema del ejemplo
del apartado Procedimientos en
Pseudocódigo,
se han
declarado las siguientes variables locales:
- numero,
en el procedimiento Numeros_del_1_al_10.
- contador y resultado, en el procedimiento Tabla_de_multiplicar_del_8.
- contador,
en el procedimiento Primeras_diez_potencias_de_2.
En
el algoritmo Menu_por_pantalla no se ha realizado ninguna
declaración de ámbito local.
Al hacer una llamada a un subprograma, es, en ese momento, y no antes,
cuando se reserva espacio de memoria para las variables locales de ese
subprograma llamado. Dicho espacio de memoria se libera cuando el
subprograma finaliza su ejecución, devolviendo el control
del flujo al programa (o subprograma) que lo llamó.
Por tanto, es importante entender que, la variable contador declarada
en el procedimiento Tabla_de_multiplicar_del_8, no representa al mismo
espacio de memoria que la variable contador declarada en el
procedimiento Primeras_diez_potencias_de_2.
Igualmente, si se hubiese declarado otra variable contador en el
programa principal, también ésta
representaría a un espacio de memoria diferente.
En el caso de que se declaren dos variables con el mismo identificador,
una local (en un subprograma) y otra global (en el programa principal),
al hacer referencia a dicho identificador, pueden ocurrir dos cosas:
1. Si se hace en el programa principal, es obvio que se está
referenciando a la variable global.
2. Pero, si se hace en el subprograma, entonces se está
referenciando a la variable local.
Asimismo, a las declaraciones de constantes y tipos de datos, se les
aplica el mismo criterio.
Ejemplo: Partiendo de los dos procedimientos
siguientes: |
|
procedimiento Ejemplo_A()
variables
entero n /* Variable local */
inicio
n ← 77
escribir( n )
fin
procedimiento Ejemplo_B()
inicio
escribir( n )
fin |
|
|
Podemos
escribir el algoritmo: |
|
algoritmo Ejemplo_C
variables
entero n /* Variable global */
inicio
n ← 30
Ejemplo_A()
Ejemplo_B()
escribir( n )
fin |
|
|
La
salida por pantalla es: |
|
|
|
Obsérvese
que, para que el procedimiento Ejemplo_B se ejecute correctamente, es
necesario que la variable n esté declarada globalmente, y
que además, ésta contenga un dato (valor entero)
en el momento de la llamada al procedimiento Ejemplo_B. En cualquier
caso, para que no se dé esta dependencia, es recomendable
declarar dicha variable localmente, como se ha hecho en el
procedimiento Ejemplo_A.
Del mismo modo, se pueden declarar dos variables con el mismo
identificador, una local (en un subprograma) y otra también
local (en otro subprograma llamado por el anterior). En cuyo caso, al
hacer referencia a dicho identificador, se estará
referenciando a la variable más local.
Las declaraciones deben ser lo más locales posibles.
Así que, cuantas menos declaraciones globales existan,
mejor. Además, con el fin de evitar confusiones, y prevenir
errores no deseados, es recomendable no usar el mismo identificador
para una variable local, que para otra global. |
|
|
|
|
|
|
|
|