Variable local

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Programación informática, una variable sólo usable en una parte de un programa (el alcance)

En informática, una variable local es una variable a la que se le asigna un alcance local. Una referencia de variable local en la función o bloque en el que se declara anula el mismo nombre de variable en el ámbito más amplio. En lenguajes de programación con sólo 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, funciones, constantes y tipos privados ocultos dentro de ellos, ya sea mediante bloques anidados o funciones anidadas. Las variables locales son fundamentales para la programación de procedimientos y, en general, para la programación modular: las variables de alcance local se utilizan para evitar problemas con efectos secundarios que pueden ocurrir con las variables globales.

Alcance

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 de ese bloque texto, 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 otra declaración las anula nuevamente); una vez finalizado el bloque, el nombre de la variable no existe. Algunos lenguajes, como Perl y Common Lisp, permiten al programador elegir un alcance estático o dinámico al definir o redefinir una variable. Ejemplos de lenguajes que utilizan alcance dinámico incluyen Logo, Emacs lisp y los lenguajes de shell bash, dash y el shell "local" de MirBSD Korn (mksh). declaración. 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 se pueden declarar, escribir y leer, sin ningún 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 idiomas, estos parámetros locales se tratan igual que otras variables locales dentro de la subrutina. Por el contrario, la semántica 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 a la subrutina modificar variables fuera de su propio alcance.

Variables locales estáticas

Un tipo especial de variable local, llamada local estática, está disponible en muchos lenguajes principales (incluidos C/C++, Visual Basic, VB.NET y PHP) 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 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, pero tienen un alcance de función (no un alcance global), como ocurre con las variables locales automáticas.

Esto es distinto de otros usos de la palabra clave estática, que tiene varios significados diferentes en varios idiomas.

Variables locales en Perl

Perl admite variables locales dinámicas y de ámbito léxico. La palabra clave local se utiliza para definir variables locales de ámbito dinámico, mientras que my se utiliza para variables locales de ámbito léxico. Dado que el alcance dinámico es menos común hoy en día, la documentación de Perl advierte que "local no es lo que la mayoría de la gente considera "local".". En cambio, la palabra clave local proporciona un valor temporal de alcance dinámico a una variable global (paquete), que dura hasta el final del bloque adjunto. Sin embargo, la variable es visible para cualquier función llamada desde dentro del bloque. Para crear variables locales con ámbito léxico, utilice el operador my en su lugar.

Para entender cómo funciona, considere el siguiente código:

$a = 1;sub f() {} local $a; $a = 2; g();}sub g() {} impresión "$an";}g();f();g();

esto generará:

1
2
1

Esto sucede porque la variable global $a se modifica a un nuevo significado temporal (local) dentro de f(), pero el valor global se restaura al salir del alcance de f().

Usar my en este caso en lugar de local habría impreso 1 tres veces ya que en ese caso la variable $a se limitaría a el alcance estático de la función f() y no visto por g().
Randal L. Schwartz y Tom Phoenix sostienen que el operador local debería haber tenido un nombre diferente como save.

Variables locales en Ruby

Ruby como lenguaje también se inspiró en Perl, pero en este caso, la notación se hizo más simple: el nombre de una variable global debe estar precedido por un signo $, como $variable_name, mientras que una local La variable simplemente no tiene el signo $ delante de su nombre, como variable_name (mientras que en Perl todos los valores escalares tienen un $ delante). Tenga en cuenta que Ruby solo proporciona soporte integrado para variables locales de ámbito estático como my de Perl, no para variables locales de ámbito dinámico como local de Perl. . Existe al menos una biblioteca para Ruby que proporciona variables de ámbito dinámico.

Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save