Variable estàtica

De Viquipèdia
Dreceres ràpides: navegació, cerca

En informàtica una variable estàtica és una variable que ha estat asignada estàticament i el seu temps de vida s'estén durant tota l'execució del programa. Normalment una variable estàtica té un àmbit més ampli que altres variables. Els valors de variables estàtiques es poden establir un cop (durant el temps d'execució) o es poden canviar en múltiples ocasions durant l'execució del programa. La terminologia "variable estàtica" es basa en C i C++, però també s'usa en molts llenguatges de programació derivats. En llenguatges de diferent origen el mateix concepte pot denominar-se "variable global".

Constants[modifica | modifica el codi]

Els programes informàtics poden emmagatzemar constants en variables constant o en variables static , depenent de les possibilitats del llenguatge de programació. Per exemple, un programa que utilitza una aproximació de pi és més fàcil d'escriure, llegir i mantenir amb una variable anomenada "PI" en lloc de múltiples ocurrències de "3.14159".

Àmbit[modifica | modifica el codi]

En el llenguatge de programació C s'usa static amb variables globals i funcions per a restringir l'àmbit a l'fitxer on es defineixen. Amb variables locals, static s'usa per emmagatzemar la variable en la memòria assignada de forma estàtica en lloc de la memòria assignada de forma automàtica. Sempre que el llenguatge no fixi la implementació del tipus de memòria a usar, la memòria assignada de forma estàtica es reserva normalment en el segment de dades del programa durant la compilació, mentre que la memòria assignada de forma automàtica és normalment implementada com pila de trucades transitori.

Variables locals[modifica | modifica el codi]

Article principal: Variable local

La majoria dels llenguatges de programació inclouen la possibilitat d'usar subrutina s. Les variables d'àmbit local en les subrutines (variables locals) es creen i destrueixen normalment dins de la pròpia subrutina (denominades variable automàtica. Alguns llenguatges, però, (ex. llenguatge de programació C) permeten a les subrutines retenir el valor de les variables entre les crides a la funció, de manera que la funció pot preservar el valor de les variables si cal. Per exemple, una variable estàtica pot registrar el nombre de vegades que una subrutina ha estat executada. Per a aquest propòsit també és possible servir-se de variables globals o d'emmagatzematge extern (ex. un fitxer en un disc). Addicionalment limita l'àmbit del compilador de la variable en qüestió a aquesta funció, fins i tot quan l'espai assignat es troba a l'àrea estàtica.

Classes[modifica | modifica el codi]

Article principal: Classe (informàtica)

Llenguatges orientats a objectes usen classes i objectes. En aquest cas, una variable de classe és una variable que no enllaça amb instàncies de la classe. Només hi ha una única còpia de la variable que es comparteix entre els mètodes de totes les instàncies independentment de la seva quantitat. En C++, les variables de classe es coneixen com a membres de dades estàtics.

Exemple en C[modifica | modifica el codi]

En el Llenguatge de programació C, el funcionament d'una variable definida com a estàtica es pot il·lustrar amb el següent codi:

#Include <stdio.h>
 
void func (){
static int x = 0;//x és inicialitzada només una vegada durant les tres trucades a func ()
printf ("% d \n", x);//mostra el valor de x
x = x+1;
}
 
int main (int argc, char * const argv []){
func ();//mostra 0
func ();//mostra 1
func ();//mostra 2
return 0;
}

Exemple en C #[modifica | modifica el codi]

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;
}
setembre
{
this.url = valor;
}
}
 
public static int Count
{
get
{
//Do not use the this keyword here
//Es this refers to "THIS Instance"
 
return Request.count;
}
//Do not allow the developer to SET this value
}
}

Exemple en C++[modifica | modifica el codi]

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

En aquest exemple, count s'aplica a la classe mentre que url s'aplica a cada instància. Noteu que la variable count ha d'inicialitzar al marge de la classe.

Referències[modifica | modifica el codi]

Vegeu també[modifica | modifica el codi]