Variabile (informatica)
In informatica, una variabile è una locazione di memoria destinata a contenere dei dati, che possono essere modificati nel corso dell'esecuzione del programma. Una variabile è spesso, ma non sempre, caratterizzata da un nome.
Una costante invece mantiene lo stesso valore per tutta la durata dell'esecuzione del programma.
Nei linguaggi tipizzati, ciascuna variabile è caratterizzata da un tipo di dato, che specifica come devono essere interpretati i valori memorizzati, e possibilmente restringe i valori accettabili (ad esempio, una variabile destinata a contenere il numero di un mese potrà assumere solo valori da 0 a 11.
Diversi concetti di variabile
In linguaggi di programmazione di livello diverso, il concetto di variabile ha sfumature diverse:
- In assembly, una variabile è semplicemente un'area di memoria di una certa dimensione, non strettamente legata al tipo di dato che ospita, che accetta alcune operazioni elementari come la lettura, l'assegnamento, semplici operazioni aritmetiche. Una cella di memoria può essere opzionalmente identificata da una etichetta (label), permettendo di rifersi ad essa con un nome facile da ricordare, ma si può sempre fare riferimento ad essa mediante il suo indirizzo.
- In linguaggi che mantengono uno stretto legame con l'architettura hardware, come il C, o il C++ per i tipi di dati elementari, le variabili possiedono un tipo, che limita le operazioni che possono essere fatte con la variabile, e modifica la semantica degli operatori (ad esempio, l'espressione 'a+b' viene valuata in modo diverso se a e b sono numeri interi oppure numeri in virgola mobile). È comunque possibile ottenere l'indirizzo di una variabile (per costruire un puntatore), e quindi manipolare manualmente l'utilizzo della memoria fatto dal compilatore.
- In linguaggi che offrono un maggiore livello di astrazione, come Java, la variabile è tipizzata, ma il nome della variabile è l'unico modo per accedere ai dati in essa memorizzati, e non è possibile dall'interno del linguaggio conoscere l'indirizzo in cui è stata memorizzata. Una variabile di tipo complesso è in realtà sempre un riferimento gestito dal linguaggio ad un'area di memoria allocata dinamicamente.
- Nei linguaggi di scripting, le variabili sono solo nomi, privi di un tipo e una dimensione definita. Lo spazio di memoria è allocato dinamicamente quando viene assegnato un valore. Le variabili sono memorizzate normalmente come testo, e gli operatori hanno il compito di interpretarle.
Utilizzo delle variabili
Nei linguaggi compilato, le variabili devono essere dichiarate prima di essere utilizate. La dichiarazione di una variabile specifica il suo tipo e riserva spazio in memoria per la variabile.
Le operazioni basilari che possono essere compiute su una variabile sono la lettura del valore in essa contenuto e la scrittura di un nuovo valore, o assegnamento.
Per leggere il contenuto di una variabile, basta mettere il suo valore in una espressione, ad esempio 'a+b'.
In molti linguaggi di scripting, per indicare che si vuole leggere il valore di una variabile, bisogna aggiungere un prefisso e/o un suffisso al nome della variabile, come $HOME negli script di shell su unix, o %HOME% nei file batch su DOS.
Per assegnare un valore ad una variabile, deve essere usato un operatore di assegnamento, ad esempio, in C, "a = b + 5" assegna alla variabile a il valore dell'espressione 'b+5'.
Formalmente, una espressione che può stare a sinistra di un operatore di assegnamento, ovvero qualcosa in cui può essere scritto un valore, è detta un l-value (contrazione di left-value). Una variabile è l'esempio tipico, ma non l'unico, di l-value. Una espressione che può essere solo letta o valutata, ma alla quale non è possibile assegnare un valore, è un r-value.
Visibilità di una variabile
Il contesto in cui una variabile viene dichiarata all'interno di un programma determina la sua visibilità o scope. Se più variabili dello stesso nome e dello stesso tipo vengono dichiarate in contesti diversi, il nome della variabile fa riferimento alla dichiarazione più specifica, ed esistono strumenti per indicare esplicitamente lo scope a cui si fa riferimento.
- Le variabili globali sono dichiarate fuori da qualsiasi struttura sintattica, e sono visibili da qualsiasi punto del programma. L'uso di variabili globali è fortemente scoraggiato dalle pratiche di buona programmazione, perché costruiscono interazioni di difficile comprensione tra diverse parti di un programma.
- Nei linguaggi orientati agli oggetti, le variabili di classe o attributi sono visibili solo all'interno della classe in cui sono state dichiarate. Se non sono statiche, ne esiste una copia per ciascun oggetto della classe, e ogni oggetto può accedere agli attributi di qualsiasi oggetto della stessa classe.
- Le variabili locali sono definite nella definizione di una funzione, e sono quindi visibili solo dal codice della funzione stessa (o talvolta anche alle sottofunzioni definite all'interno di un'altra funzione).
- I parametri formali di una funzione sono assimilabili ai parametri locali dal punto di vista della visibilità.
- Senza dover definire una funzione, in alcuni linguaggi, è possibile dichiarare una variabile all'interno di un blocco di una struttura di controllo, usare un costrutto di blocco solo per delimitare lo scope di una variabile locale, oppure dichiarare una variabile all'interno di un'espressione. Queste variabili sono visibili solo all'interno del blocco o dell'espressione in cui sono dichiarate. Queste pratiche sono utili per mantenere in vita una variabile solo per il tempo necessario, per motivi di pulizia sintattica o di economia di memoria.
