De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

En la programación de computadoras , una variable global es una variable con alcance global , lo que significa que es visible (por lo tanto, accesible) en todo el programa, a menos que esté sombreada . 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 (duración) 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. antes de tiempo.

En algunos lenguajes, todas las variables son globales, o globales por defecto, mientras que en la mayoría de los lenguajes modernos las variables tienen un alcance limitado, generalmente alcance léxico , aunque las variables globales a menudo están disponibles al declarar una variable en el nivel superior del programa. En otros lenguajes, 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.

Utilice [ editar ]

Los mecanismos de interacción con las variables globales se denominan mecanismos del entorno global (véase también el 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 de llamador / destinatario de la llamada, 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 que se ven con los lenguajes con un espacio de nombres global, aunque algunos problemas pueden persistir sin la encapsulación adecuada. Sin un bloqueo adecuado (como con un mutex ), el código que usa variables globales no será seguro para subprocesos, excepto para los valores de solo lectura en la memoria protegida .

Variables de entorno [ editar ]

Las variables de entorno son una función 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 debe acceder a ellos mediante llamadas a la API , como getenv()y setenv().

Son locales del proceso en el que se establecieron. Eso significa que si abrimos dos ventanas de terminal (dos procesos diferentes que ejecutan el shell) y cambiamos el valor de la variable de entorno en una ventana, ese cambio no será visto por 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 la bifurcación , luego el hijo ajusta el entorno según sea necesario y, por último, el hijo se reemplaza a sí mismo con el programa que se va a llamar. Por tanto, los procesos del niño no pueden utilizar variables de entorno para comunicarse con sus compañeros, evitando el problema de acción a distancia.

Solo global y global por defecto [ editar ]

Varios lenguajes no estructurados , como (las primeras versiones de) BASIC , COBOL y Fortran I (1956) solo proporcionan variables globales. Fortran II (1958) introdujo subrutinas con variables locales y la palabra clave COMMON 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 COMMON nombrados para globales se comportan como espacios de nombres estructurados. [2] Las variables también son globales por defecto en FORTH , Lua , Perl y la mayoría de shells.

Por idioma [ editar ]

C y C ++ [ editar ]

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 sombreadas por un objeto con el mismo nombre en un alcance más cercano, como una variable local); e implícitamente tienen un enlace externo y, por lo tanto, son visibles no solo para el .carchivo o la unidad de compilaciónque contienen sus declaraciones, sino también a todas las demás unidades de compilación que están vinculadas 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 se puede definir solo en uno). Dichas externdeclaraciones a menudo se colocan en un archivo de encabezado compartido, ya que es una práctica común que todos los archivos .c en un proyecto incluyan al menos un .harchivo: el estándar archivo de encabezado errno.hes un ejemplo, haciendo que elerrnovariable accesible a todos los módulos de un proyecto. Cuando se considere que este mecanismo de acceso global es problemático, se puede deshabilitar usando la staticpalabra clave que restringe una variable al alcance del archivo y hará que los intentos de importarlo externgeneren un error de compilación (o enlace). [3]

Un ejemplo de una variable "global" en C :

#include  <stdio.h>// Esta es la variable de alcance de archivo (con enlace interno), visible solo en // esta unidad de compilación. static  int  shared  =  3 ;// Este tiene enlace externo (no limitado a esta unidad de compilación). extern  int  over_shared ;// También vinculación interna. int  over_shared_too  =  2 ;static  void  ChangeShared ()  {  // Referencia a la variable de alcance de archivo en una función.  compartido  =  5 ; }static  void  LocalShadow ()  {  // Variable local que ocultará el global del mismo nombre.  int  compartido ; // Esto afectará solo 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 ( int  shared )  {  // Esto afectará solo al parámetro y no tendrá ningún efecto en la  variable  file- // scope del mismo nombre. compartido  =  - compartido ; }int  main ()  {  // Referencia a la variable de alcance de archivo. printf ( "% d \ n " ,  compartido ); ChangeShared (); printf ( "% d \ n " ,  compartido ); LocalShadow (); printf ( "% d \ n " ,  compartido ); ParamShadow ( 1 ); printf ( "% d \ n " ,  compartido ); return  0 ; }

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

La salida será:

3555

Java [ editar ]

Algunos lenguajes, como Java, no tienen variables globales. En Java, todas las variables que no son variables locales son campos de una clase. Por tanto, todas las variables están en el ámbito 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 una copia se comparte 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 de "compartir" similar:

public  class  Global  {  public  static  int  a ; }

PHP [ editar ]

PHP tiene una globalpalabra clave y varias formas inusuales de usar variables globales. Las variables declaradas fuera de las funciones tienen un 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, siempre se puede acceder a algunas variables predefinidas, conocidas como superglobales . 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. Las superglobales $_POSTy $_GETson ampliamente utilizadas en programación web.

Otros idiomas [ editar ]

  • En Python y MATLAB, una variable global se puede declarar en cualquier lugar con la globalpalabra clave. [4] [5]
  • Las variables globales de Ruby se distinguen por un $" sigilo " . Existe una serie de globales predefinidos, por ejemplo, $$es el ID de proceso actual .

Ver también [ editar ]

  • Variable local
  • Variable no local
  • Patrón singleton
  • Variables
    • Variable estática
    • Variable externa

Referencias [ editar ]

  1. ^ "Tutorial de Fortran 77" .
  2. ^ "Primeros pasos: apilar y apilar objetos" .
  3. C en pocas palabras, P.Prinz & T Crawford, 2006, O'Reilly, Ch 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" . in.mathworks.com . The MathWorks, Inc . Consultado el 7 de febrero de 2015 .