Usuari:Mcapdevila/Variable estàtica

De la Viquipèdia, l'enciclopèdia lliure

En informàtica una variable estàtica és una variable que ha estat assignada 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é es fa servir en molts llenguatges de programació derivats. En llenguatges de diferent origen el mateix concepte pot denominar-se "variable global".

Constants[modifica]

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 comptes de múltiples ocurrències de "3.14159".

Àmbit[modifica]

En el llenguatge de programació C es fa servir static amb variables globals i funcions per a restringir l'àmbit a l'fitxer on es defineixen. Amb variables locals, static es fa servir per emmagatzemar la variable en l'memòria assignada de forma estàtica en comptes 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]

La majoria dels llenguatges de programació inclouen la possibilitat d'usar subrutines. Les variables d'àmbit local en les subrutines (variables locals) es creen i destrueixen normalment dins de la mateixa 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]

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]

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]

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]

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]

Vegeu també[modifica]