En programació, una variable és un espai reservat a la memòria que, com el nom indica, pot canviar de contingut al llarg de l'execució d'un programa. Una variable correspon a una àrea reservada a la memòria principal de l'ordinador. Pot ser de longitud:
Fixa. Quan la seva mida no variarà al llarg de l'execució del programa. Totes les variables, siguin del tipus que siguin, tenen longitud fixa, menys algunes excepcions - com les col·leccions d'altres variables (arrays) o els strings.
Variable. Quan la seva mida pot variar al llarg de l'execució. Típicament col·leccions de dades.
Com que les variables contenen o apunten a valors de tipus determinats, les operacions sobre les mateixes i el domini dels seus propis valors estan determinades pel tipus de dades en qüestió.
Les variables poden ser intercanviades entre rutines, per valor i per referència:
Per valor. Es copia el valor (la dada) de la variable a la zona de la pila de trucades -d'entorn local- que correspon a la nova subrutina cridada. Per tant, aquesta subrutina obté aquest valor però no pot modificar la variable original. Això significa que si la variable pateix alteracions dins d'aquesta rutina, per poder accedir a aquestes modificacions en acabar, haurà de tornar el nou valor d'aquesta. Si no es realitza aquesta operació, el valor de la variable serà exactament el mateix que tenia abans de passar per la funció.
Per referència. No es passa el valor directament de la variable, sinó una referència o punter a la mateixa -que conté l'adreça de la zona de memòria on s'allotja el contingut- de manera que s'opera directament sobre la zona de memòria que la conté. Això implica que les modificacions que pateixi seran accessibles posteriorment.
Les variables es representen amb identificadors que fan referència a un lloc de la memòria del programa on s'emmagatzema una dada. Una variable està associada a un tipus de dada, el qual i en funció de la seva mida determina la quantitat de bytes que seran necessaris per emmagatzemar la variable. En el cas de col·leccions i al contrari que amb la resta de tipus de dades, ja siguin primitius o objectes complexos, la memòria assignada a emmagatzemar aquestes variables no es coneix per endavant, fet que porta a establir polítiques de reserva de memòria:
Reserva fixa de memòria. Implica predeterminar la quantitat de memòria que s'assignarà a la col·lecció. És una política rígida, ja que arribats al final de la zona de memòria no es podrien emmagatzemar nous elements.
Reserva variable de memòria. Es dedica una zona de memòria, de mida predeterminada o no, i en cas de sobrepassar aquesta zona de memòria es torna a assignar una altra zona, contigua o no, impedint la restricció esmentada.
Entorn
Respecte a l'àmbit d'una variable, aquest pot ser:
Local . Quan la variable només és accessible des d'un únic procediment fill, no podent ser llegida o modificada des d'un altre procediment germà o des del mateix procediment pare. És possible declarar variables en blocs de condició, bucles, etc. de manera que només s'hi pugui accedir en el mateix bloc.
Global . Quan la variable és accessible tant des de rutines o macros de l'aplicació, com en tots els procediments i funcions d'aquesta.
Si bé és cert, que d'una forma bàsica, es pot definir l'entorn de les variables de la forma exposada més amunt, hi ha graus de globalitat de les variables; poden ser accessibles des d'uns punts o altres, o fins i tot poden ser accessibles des d'aplicacions diferents, arribant al cas de la superglobalitat.
- Exemple de l'entorn d'una variable en el llenguatge de programació Java.
publicclassA{publicIntegernumeroEntero=newInteger();/* Variable Global a tots els Mètodes */publicIntegerMetode(){intnum=1;//Variable Local a Metode. Es pot accedir dins d'aquest Metode en qualsevol part, però no fora d'aquest.for(inti=0;i<numeroEntero.intValue();i++){//i és local al bucle for, només es pot accedir dins del mateix.num*=i;}//I = 2; Aquesta línia provocaria error al no haver declarat la variable i. i va ser definida localment al bucle for.returnInteger.valueOf(num);}publicvoidaltreMetode(){intnum=1;//Variable local a altreMetode. num aquí és una variable diferent de la variable num de MetodeSystem.out.println("Variable local num:"+num);}}
En el llenguatge Java el cas de les variables globals a tots els mètodes que es troben en una classe és peculiar, ja que les variables realment són atributs que defineixen un objecte d'una classe determinada. En aquest cas la classe A té un atribut anomenat numeroEntero. L'atribut és un concepte que no defineix un objecte d'una classe determinada, sinó que és una variable que serveix de suport als procediments i defineix conceptualment objectes.