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 bloque en el que se declara anulan el mismo nombre de variable en el ámbito más amplio. En 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 de visibilidad anidados, 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, en general, 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 determinado bloque, entonces su alcance es el texto del programa de la definición del bloque: dentro del texto de ese bloque, el nombre de la variable existe 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 determinado bloque, entonces su alcance es ese bloque y todas las funciones llamadas transitivamente por ese bloque (excepto cuando se invalida nuevamente por otra declaración); una vez finalizado el bloque, el nombre de la variable no existe. Algunos idiomas, como Perl yCommon Lisp , permite al programador elegir el alcance estático o dinámico al definir o redefinir una variable. Ejemplos de lenguajes que usan alcance dinámico incluyen Logo , Emacs lisp y los lenguajes shell bash , dash y la declaración "local" del shell MirBSD Korn ( mksh ). La mayoría de los otros lenguajes proporcionan variables locales de ámbito léxico.

En la mayoría de los lenguajes, 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 se pueden declarar, escribir y leer sin riesgo de efectos secundarios en funciones fuera del bloque en el que se declaran.

Los lenguajes de programación que emplean la 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 lenguajes, estos parámetros locales se tratan de la misma forma que otras variables locales dentro de la subrutina. En contraste, 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, permitiendo que la subrutina modifique variables fuera de su propio alcance.

Un tipo especial de variable local, llamado local estático, está disponible en muchos lenguajes convencionales (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 (por ejemplo, static).

Los locales estáticos en funciones globales tienen la misma 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 ocurre con las variables locales automáticas.