Variable estática

En informática una variable estática es una variable que ha sido ubicada estáticamente y cuyo tiempo de vida se extiende durante toda la ejecución del programa. Normalmente una variable estática tiene un ámbito más amplio que otras variables. Los valores de variables estáticas se pueden establecer una vez (durante el tiempo de ejecución) o se pueden cambiar en múltiples ocasiones durante la ejecución del programa. La terminología "variable estática" se basa en C y C++, pero también se usa en muchos lenguajes de programación derivados. En lenguajes de diferente origen el mismo concepto puede denominarse "variable global".

Constantes

[editar]

Los programas informáticos pueden almacenar constantes en variables constant o en variables static, dependiendo de las posibilidades del lenguaje de programación. Por ejemplo, un programa que usa una aproximación de pi es más fácil de escribir, leer y mantener con una variable llamada "PI" en lugar de múltiples ocurrencias de "3.14159".

Ámbito

[editar]

En el lenguaje de programación C se usa static con variables globales y funciones para restringir su ámbito al archivo donde se definen. Con variables locales, static se usa para almacenar la variable en la memoria asignada de forma estática en lugar de en la memoria asignada de forma automática. Siempre y cuando el lenguaje no fije la implementación del tipo de memoria a usar, la memoria asignada de forma estática se reserva normalmente en el segmento de datos del programa durante la compilación, mientras que la memoria asignada de forma automática es normalmente implementada como pila de llamadas transitorio.

Variables locales

[editar]

La mayoría de los lenguajes de programación incluyen la posibilidad de usar subrutinas. Las variables de ámbito local en las subrutinas (variables locales) se crean y destruyen normalmente dentro de la propia subrutina (denominadas variable automática. Algunos lenguajes, sin embargo, (ej. lenguaje de programación C) permiten a las subrutinas retener el valor de las variables entre las llamadas a la función, de forma que la función puede preservar el valor de las variables si fuera necesario. Por ejemplo, una variable estática puede registrar el número de veces que una subrutina ha sido ejecutada. Para este propósito también es posible servirse de variables globales o de almacenamiento externo (ej. un archivo en un disco). Adicionalmente limita el ámbito del compilador de la variable en cuestión a esa función, incluso cuando el espacio asignado se encuentra en el área estática.

Clases

[editar]

Lenguajes orientados a objetos usan clases y objetos. En este caso, una variable de clase es una variable que no está asociada con instancias de la clase. Solo hay una única copia de la variable que se comparte entre los métodos de todas las instancias independientemente de su cantidad. En C++, las variables de clase se conocen como miembros de datos estáticos.

Ejemplo en C

[editar]

En el Lenguaje de programación C, el funcionamiento de una variable definida como estática se puede ilustrar con el siguiente código:

#include <stdio.h>

void func() {
	static int x = 0; // x es inicializada solo una vez durante las tres llamadas a func()
	printf("%d\n", x); // muestra el valor de x
	x = x + 1;
}

int main(int argc, char * const argv[]) {
	func(); // muestra 0
	func(); // muestra 1
	func(); // muestra 2
	return 0;
}

Ejemplo en C#

[editar]
public class Request
{
	private static int count;
	private string url;

	public Request()
	{
		//Create a new instance of Request
		//Count all requests
		Request.count++;
	}

	public string Url
	{
		get
		{
			return this.url;
		}
		set
		{
			this.url = value;
		}
	}

	public static int Count
	{
		get
		{
			//Do not use the this keyword here
			//as this refers to "THIS INSTANCE"

			return Request.count;
		}
		//Do not allow the developer to SET this value
	}
}

Ejemplo en C++

[editar]
class Request
{
	private:
		static int count;
		string url;
	
	public:
		Request() { count++; }
		string getUrl() const { return url; }
		void setUrl(string value) { url = value; }
		static int getCount() { return count; }
};
int Request::count = 0;

En este ejemplo, count se aplica a la clase mientras que url se aplica a cada instancia. Nótese que la variable count debe inicializarse al margen de la clase.

Referencias

[editar]

Véase también

[editar]