stringtranslate.com

Variable global

En programación de computadoras , una variable global es una variable con alcance global , lo que significa que es visible (y por lo tanto accesible) en todo el programa, a menos que esté oculta . El conjunto de todas las variables globales se conoce como entorno global o estado global. En los lenguajes compilados , las variables globales son generalmente variables estáticas , cuya extensión (vida útil) es todo el tiempo de ejecución del programa, aunque en los lenguajes interpretados (incluidos los intérpretes de línea de comandos ), las variables globales generalmente se asignan dinámicamente cuando se declaran, ya que no se conocen. con anticipación.

En algunos idiomas, todas las variables son globales, o globales de forma predeterminada, mientras que en la mayoría de los idiomas modernos las variables tienen un alcance limitado, generalmente un alcance léxico , aunque las variables globales a menudo están disponibles declarando una variable en el nivel superior del programa. En otros idiomas, sin embargo, las variables globales no existen; Estos son generalmente lenguajes de programación modulares que imponen una estructura de módulo, o lenguajes de programación orientados a objetos basados ​​en clases que imponen una estructura de clases.

Usar

Los mecanismos de interacción con variables globales se denominan mecanismos de entorno global (ver también estado global ). El paradigma del entorno global se contrasta con el paradigma del entorno local, donde todas las variables son locales sin memoria compartida (y, por lo tanto, todas las interacciones pueden reconducirse al paso de mensajes ).

Las variables globales se utilizan ampliamente para pasar información entre secciones de código que no comparten una relación entre el llamante y el destinatario, como subprocesos concurrentes y controladores de señales. Los lenguajes (incluido C) donde cada archivo define un espacio de nombres implícito eliminan la mayoría de los problemas observados con los lenguajes con un espacio de nombres global , aunque algunos problemas pueden persistir sin una encapsulación adecuada. Sin un bloqueo adecuado (como con un mutex ), el código que utiliza variables globales no será seguro para subprocesos , excepto para valores de solo lectura en la memoria protegida .

Variables de entorno

Las variables de entorno son una facilidad proporcionada por algunos sistemas operativos . Dentro del shell del sistema operativo ( ksh en Unix , bash en Linux , COMMAND.COM en DOS y CMD.EXE en Windows ) son una especie de variable: por ejemplo, en Unix y sistemas relacionados una variable ordinaria se convierte en una variable de entorno cuando la exportpalabra clave se utiliza. El código de programa que no sea shells tiene que acceder a ellos mediante llamadas API , como getenv()y setenv().

Son locales al proceso en el que fueron establecidos. Eso significa que si abrimos dos ventanas de terminal (dos procesos diferentes que ejecutan Shell) y cambiamos el valor de la variable de entorno en una ventana, ese cambio no será visto en otra ventana.

Cuando se crea un proceso hijo, hereda todas las variables de entorno y sus valores del proceso padre. Por lo general, cuando un programa llama a otro programa, primero crea un proceso hijo mediante una bifurcación , luego el hijo ajusta el entorno según sea necesario y, por último, se reemplaza a sí mismo con el programa que se va a llamar. Por lo tanto, los procesos secundarios no pueden utilizar variables de entorno para comunicarse con sus pares, evitando el problema de la acción a distancia.

Solo global y global por defecto

Varios lenguajes no estructurados , como (las primeras versiones de) BASIC , COBOL y Fortran I (1956) sólo proporcionan variables globales. Fortran II (1958) introdujo subrutinas con variables locales y la palabra clave COMÚN para acceder a variables globales. El uso de COMMON en FORTRAN continuó en FORTRAN 77, [1] e influyó en lenguajes posteriores como PL/SQL. Los grupos COMUNES con nombre para globales se comportan de forma similar a los espacios de nombres estructurados. [2] Las variables también son globales de forma predeterminada en Forth , Lua , Perl y la mayoría de los shells.

Por idioma

C y C++

El lenguaje C no tiene una global palabra clave . Sin embargo, las variables declaradas fuera de una función tienen "alcance de archivo", lo que significa que son visibles dentro del archivo. Las variables declaradas con alcance de archivo son visibles entre su declaración y el final de la unidad de compilación ( .carchivo) (a menos que estén ocultas por un objeto con el mismo nombre en un alcance más cercano, como una variable local); e implícitamente tienen un vínculo externo y, por lo tanto, son visibles no solo para el .carchivo o unidad de compilación que contiene sus declaraciones sino también para cualquier otra unidad de compilación que esté vinculada para formar el programa completo. Sin embargo, el enlace externo no es suficiente para el uso de dicha variable en otros archivos: para que una unidad de compilación acceda correctamente a dicha variable global, necesitará conocer su tipo. Esto se logra declarando la variable en cada archivo usando la externpalabra clave. (Se declarará en cada archivo, pero puede definirse solo en uno). Estas declaraciones a menudo se colocan en un archivo de encabezado compartido, ya que es una práctica común que todos los archivos de un proyecto incluyan al menos un archivo: el archivo de encabezado estándar. es un ejemplo que hace que la variable sea accesible para todos los módulos de un proyecto. Cuando este mecanismo de acceso global se considere problemático, se puede desactivar usando la palabra clave que restringe una variable al alcance del archivo y provocará que los intentos de importarla generen un error de compilación (o vinculación). [3]extern.c.herrno.herrnostaticextern

Un ejemplo de una variable "global" en C :

#incluir <stdio.h> // Esta es la variable de alcance del archivo (con enlace interno), visible solo // en esta unidad de compilación. estático int compartido = 3 ;    // Éste tiene enlace externo (no limitado a esta unidad de compilación). externo int over_shared ;  // También enlace interno. int over_shared_too = 2 ;   static void ChangeShared () { // Referencia a la variable de alcance del archivo en una función. compartido = 5 ; }       static void LocalShadow () { // Variable local que ocultará el global del mismo nombre. int compartido ;       // Esto afectará sólo a la variable local y no tendrá ningún efecto en la // variable de alcance de archivo del mismo nombre. compartido = 1000 ; }    static void ParamShadow ( intshared ) { // Esto afectará solo al parámetro y no tendrá ningún efecto en la // variable de alcance del archivo del mismo nombre. compartido = - compartido ; }         int main () { // Referencia a la variable de alcance del archivo.    printf ( "%d \n " , compartido );  CambiarCompartido (); printf ( "%d \n " , compartido );  Sombra local (); printf ( "%d \n " , compartido );  ParamShadow ( 1 ); printf ( "%d \n " , compartido );  devolver 0 ; } 

Como la variable es externa, no es necesario pasarla como parámetro para usarla en una función además de principal. Pertenece a todas las funciones del módulo.

La salida será:

3555

Java

Algunos lenguajes, como Java, no tienen variables globales. En Java, todas las variables que no son variables locales son campos de una clase. Por lo tanto, todas las variables están en el alcance de una clase o de un método. En Java, los campos estáticos (también conocidos como variables de clase ) existen independientemente de cualquier instancia de la clase y se comparte una copia entre todas las instancias; por lo tanto, los campos estáticos públicos se utilizan para muchos de los mismos propósitos que las variables globales en otros idiomas debido a su comportamiento similar de "compartir":

clase pública Global { public static int a ; }       

PHP

PHP tiene una globalpalabra clave y varias formas inusuales de utilizar variables globales. Las variables declaradas fuera de funciones tienen alcance de archivo (que para la mayoría de los propósitos es el alcance más amplio). Sin embargo, no son accesibles dentro de funciones a menos que se importen con la globalpalabra clave (es decir, la palabra clave accede a variables globales, no las declara ).

Sin embargo, algunas variables predefinidas, conocidas como superglobales , siempre están accesibles. Todos son matrices. Uno de propósito general es el $GLOBALSsuperglobal, que contiene todas las variables definidas fuera del alcance de la función. Los cambios en sus elementos cambian las variables originales y las adiciones crean nuevas variables. Los superglobales $_POSTy $_GETson muy utilizados en programación web.

Otros idiomas

Ver también

Referencias

  1. ^ "Tutorial de Fortran 77".
  2. ^ "Primeros pasos: apilar y acumular objetos".
  3. ^ C en pocas palabras, P.Prinz & T Crawford, 2006, O'Reilly, capítulo 11
  4. ^ "¿Cuáles son las reglas para las variables locales y globales en Python?". docs.python.org . Fundación de software Python . Consultado el 4 de junio de 2020 .
  5. ^ "Declarar variables como globales". en.mathworks.com . MathWorks, Inc. Consultado el 7 de febrero de 2015 .