En informática , una variable local es una variable a la que se le da un ámbito local . Una referencia a una variable local en la función o bloque en el que se declara sobrescribe 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 contraponen a 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, más generalmente, para la programación modular : las variables de ámbito local se utilizan para evitar problemas con los efectos secundarios que pueden ocurrir con las variables globales .
Alcance
Las variables locales pueden tener un ámbito léxico o dinámico , aunque el ámbito léxico (estático) es mucho más común. En el ámbito léxico (o ámbito estático), si el ámbito de un nombre de variable es un bloque determinado, entonces su ámbito es el texto del programa que define dicho bloque: dentro del texto de ese bloque, el nombre de la variable existe y está vinculado a su valor, pero fuera del texto de ese bloque, el nombre de la variable no existe. Por el contrario, en el ámbito dinámico, si el ámbito de un nombre de variable es un bloque determinado, entonces su ámbito es ese bloque y todas las funciones llamadas transitivamente por ese bloque (excepto cuando se sobrescribe nuevamente mediante otra declaración); después de que finaliza el bloque, el nombre de la variable no existe. Algunos lenguajes, como Perl y Common Lisp , permiten al programador elegir el ámbito estático o dinámico al definir o redefinir una variable. Entre los lenguajes que utilizan ámbito dinámico se incluyen Logo , Emacs Lisp y los lenguajes de shell bash , dash y la declaración "local" del shell Korn de MirBSD ( mksh ). La mayoría de los demás lenguajes ofrecen variables locales con ámbito léxico.
En la mayoría de los lenguajes de programación, las variables locales son variables automáticas que se almacenan 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 ámbito se pueden declarar, modificar y leer sin riesgo de que afecten a funciones fuera del bloque en el que se declaran.
Los lenguajes de programación que emplean la semántica de paso por valor proporcionan a la subrutina llamada una copia local de los argumentos que se le pasan. En la mayoría de los lenguajes, estos parámetros locales se tratan igual que otras variables locales dentro de la subrutina. En cambio, la semántica de paso por referencia y por nombre permite que los parámetros actúen como alias de los valores pasados como argumentos, lo que permite a la subrutina modificar variables fuera de su propio ámbito.
Variables locales estáticas
Un tipo especial de variable local, llamada variable local estática, está disponible en muchos lenguajes de programación convencionales (incluidos C / C++ , Visual Basic , VB.NET y PHP ) que permite conservar un valor entre llamadas a la función; se trata de una variable estática con ámbito 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 mencionados, las variables estáticas se declaran como tales con una palabra clave de clase de almacenamiento especial (por ejemplo, static).
Las variables locales estáticas en funciones globales tienen la misma vida útil que las variables globales estáticas , porque su valor permanece en la memoria durante la vida del programa, [ 1 ] pero tienen ámbito de función (no ámbito global), como ocurre con las variables locales automáticas.
Esto es distinto de otros usos de la staticpalabra clave , que tiene varios significados diferentes en varios idiomas.
Variables locales en Perl
Perl admite variables locales tanto dinámicas como con ámbito léxico. La palabra clave localse utiliza para definir variables locales con ámbito dinámico, mientras que myse utiliza para variables locales con ámbito léxico. Dado que el ámbito dinámico es menos común hoy en día, la documentación de Perl advierte que " localno es lo que la mayoría de la gente piensa como "local"." [ 2 ] En cambio, la localpalabra clave proporciona un valor temporal con ámbito dinámico a una variable global (de paquete), que dura hasta el final del bloque que la contiene. Sin embargo, la variable es visible para cualquier función llamada desde dentro del bloque. [ 3 ] Para crear variables locales con ámbito léxico, utilice el myoperador en su lugar. [ 4 ]
Para comprender cómo funciona, considere el siguiente código:
$a = 1 ; sub f () { local $a ; $a = 2 ; g (); } sub g () { print "$a\n" ; } g (); f (); g ();Esto generará:
1 2 1
Esto sucede porque la variable global $a se modifica a un nuevo significado temporalf() (local) dentro de , pero el valor global se restaura al salir del ámbito de f().
Usar myen este caso en lugar de localhabría impreso 1 tres veces ya que en ese caso la $avariable estaría limitada al ámbito estático de la función f()y no sería vista por g(). Randal L. Schwartz y Tom Phoenix argumentan que el operador localdebería haber tenido un nombre diferente como save. [ 5 ]
Variables locales en Ruby
Ruby, como lenguaje, también se inspiró en Perl, pero en este caso, la notación se simplificó: el nombre de una variable global debe ir precedido de un signo $, como $variable_name, mientras que una variable local simplemente no lleva un signo $ delante de su nombre, como variable_name(mientras que en Perl todos los valores escalares llevan un $ delante). Cabe destacar que Ruby solo ofrece soporte integrado para variables locales de ámbito estático como las de Perl my, no para variables locales de ámbito dinámico como las de Perl local. Existe al menos una biblioteca para Ruby que proporciona variables de ámbito dinámico. [ 6 ]
Véase también
Referencias
- ↑ "Estándar C actual" (PDF) . (3,61 MB) ( a partir de 2009)). En particular, véase la sección 6.2.4 “Duración del almacenamiento de objetos”, página 32.
- ↑ perldoc.perl.org: local
- ↑ perldoc.perl.org: perlsub: Valores temporales a través de
local() - ↑ perldoc.perl.org: perlsub: Variables privadas a través de
my() - ↑ Randal L. Schwartz y Tom Phoenix (1 de julio de 2001). Aprendiendo Perl, 3.ª edición . O'REILLY. Párrafo 4.7. ISBN 0-596-00132-0.
- ↑ Conrad Irwin. "LSpace: Ámbito dinámico para Ruby". Diciembre de 2012 http://cirw.in/blog/lspace Recuperado el 16 de octubre de 2013.
- Variable (informática)