Variable local


En informática , una variable local es una variable a la que se le da un alcance local . Las referencias a variables locales en la función o el bloque en el que se declara anulan el mismo nombre de variable en el ámbito más amplio. En los lenguajes de programación con solo dos niveles de visibilidad, las variables locales se contrastan con las variables globales . Por otro lado, muchos lenguajes derivados de ALGOL permiten cualquier número de niveles anidados de visibilidad, con variables privadas, funciones, constantes y tipos ocultos dentro de ellos, ya sea por bloques anidados o funciones anidadas.. Las variables locales son fundamentales para la programación procedimental y, más generalmente, para la programación modular : las variables de alcance local se utilizan para evitar problemas con los efectos secundarios que pueden ocurrir con las variables globales .

Las variables locales pueden tener un alcance léxico o dinámico , aunque el alcance léxico (estático) es mucho más común. En el alcance léxico (o alcance léxico; también llamado alcance estático o alcance estático), si el alcance de un nombre de variable es un bloque determinado, entonces su alcance es el texto del programa de la definición del bloque: dentro del texto de ese bloque, existe el nombre de la variable y está vinculado al valor de la variable, pero fuera del texto de ese bloque, el nombre de la variable no existe. Por el contrario, en el alcance dinámico (o alcance dinámico), si el alcance de un nombre de variable es un bloque determinado, entonces su alcance es ese bloque y todas las funciones llamadas transitivamente por ese bloque (excepto cuando se anula nuevamente por otra declaración); después de que finaliza el bloque, el nombre de la variable no existe. Algunos lenguajes, como Perl yCommon Lisp , permite al programador elegir un alcance estático o dinámico al definir o redefinir una variable. Entre los ejemplos de lenguajes que usan alcance dinámico se incluyen Logo , Emacs lisp y los lenguajes de shell bash , dash y la declaración "local" del shell de MirBSD Korn ( mksh ). La mayoría de los demás idiomas proporcionan variables locales de ámbito léxico.

En la mayoría de los idiomas, las variables locales son variables automáticas almacenadas directamente en la pila de llamadas . Esto significa que cuando una función recursiva se llama a sí misma, las variables locales en cada instancia de la función reciben direcciones distintas . Por lo tanto, las variables de este alcance pueden declararse, escribirse y leerse, sin ningún riesgo de efectos secundarios para las funciones fuera del bloque en el que se declaran.

Los lenguajes de programación que emplean semántica de llamada por valor proporcionan una subrutina llamada con su propia copia local de los argumentos que se le pasan. En la mayoría de los idiomas, estos parámetros locales se tratan igual que otras variables locales dentro de la subrutina. Por el contrario, la semántica de llamada por referencia y llamada por nombre permite que los parámetros actúen como alias de los valores pasados ​​como argumentos, lo que permite que la subrutina modifique variables fuera de su propio ámbito.

Un tipo especial de variable local, llamada variable local estática, está disponible en muchos lenguajes principales (incluidos C / C++ , Visual Basic y VB.NET ) que permite retener un valor de una llamada de la función a otra: es una variable estática con alcance local. En este caso, las llamadas recursivas a la función también tienen acceso a la variable (única, asignada estáticamente ). En todos los lenguajes anteriores, las variables estáticas se declaran como tales con una palabra clave de clase de almacenamiento especial (p. ej., static).

Las variables locales estáticas en funciones globales tienen el mismo tiempo de vida que las variables globales estáticas , porque su valor permanece en la memoria durante la vida del programa, [1] pero tienen alcance de función (no alcance global), como con las variables locales automáticas.