# Variabele (informatica)

Een variabele is een term uit de informatica die gebruikt wordt in verband met programmeren.
In de broncode van een computerprogramma associeert een variabele een naam met een of meer geheugenadressen. De waarde die opgeslagen is in de geheugenadressen die bij een bepaalde variabele horen, kunnen via deze variabele geïnspecteerd en veranderd worden. De naam van een variabele is een identifier.

## Kenmerken

De naam van een variabele hoeft niet uniek te zijn: verschillende variabelen kunnen dezelfde naam hebben. Behalve een naam heeft iedere variabele nog een aantal kenmerken en deze kenmerken samen maken iedere variabele uniek.
Een variabele heeft over het algemeen de volgende kenmerken:

### Een naam

    Dit is de naam waarmee de variabele in de broncode aangeduid wordt. Omdat verschillende variabelen dezelfde naam kunnen hebben is de naam alleen niet voldoende om vast te stellen welke variabele bedoeld wordt. Om vast te stellen welke variabele bedoeld wordt kijkt de compiler (of de interpreter) niet alleen naar de naam, maar ook naar de plaats waar de variabele gebruikt wordt.

### Een adres

    Dit is het geheugenadres (of de geheugenadressen) waar de variabele naar verwijst. Dezelfde variabelenaam kan op verschillende plekken in het programma naar verschillende geheugenadressen verwijzen, afhankelijk van de context waarin de variabele gebruikt wordt. Ook is het mogelijk dat er verschillende variabelen naar hetzelfde adres verwijzen.

### Een waarde

    Dit is de waarde die in het geheugenadres waarnaar de variabele verwijst is opgeslagen en die door middel van de variabele bereikbaar is. Deze waarde verandert vaak in de loop van het programma.

### Een datatype

    Het datatype van een variabele bepaalt welke waarden de variabele aan kan nemen en hoe de variabele gebruikt kan worden. Ook bepaalt het type hoe de data op de geheugenlocatie waarnaar de variabele verwijst geïnterpreteerd wordt. Twee verschillende variabelen met verschillende typen kunnen naar dezelfde locatie wijzen. De waarden die deze variabelen representeren kan dan verschillen, afhankelijk van hun typen.

### Een bereik

    Het bereik van een variabele bepaalt wanneer de variabele "zichtbaar" is en in het programma gebruikt kan worden.

### Een levensduur

    De levensduur van een variabele is de tijd dat de variabele geassocieerd is met (of "gebonden aan") een specifiek geheugenadres. Deze levensduur loopt van het moment dat de variabele gecreëerd (gealloceerd) wordt tot het moment dat hij verdwijnt (gedealloceerd wordt). De levensduur van een variabele valt niet altijd samen met zijn bereik.
Sommige van de genoemde kenmerken worden expliciet door de programmeur gespecificeerd (bijvoorbeeld de naam en in sommige programmeertalen het type). Andere kenmerken worden impliciet gedefinieerd aan de hand van de plaats waar de variabele gedeclareerd wordt of voor het eerst gebruikt wordt (bijvoorbeeld het bereik en de levensduur).

## Declaratie, toewijzing en gebruik

Een variabele kan in een programma in drie contexten voorkomen: de variabele wordt gedeclareerd, er wordt een waarde aan de variabele toegewezen of de variabele wordt gebruikt.

### Declaratie

Sommige programmeertalen kennen variabelendeclaraties: een variabele moet (of soms: mag) eerst worden gedeclareerd voordat deze gedefinieerd of gebruikt wordt. Op het moment van declaratie worden de naam en eventueel ook het type van de variabele vastgelegd. Ook worden, op basis van de plaats in het programma waar de declaratie plaatsvindt, het bereik en de levensduur van de variabele bepaald.
Een variabele kan slechts één keer gedeclareerd worden. Wanneer dezelfde naam in een andere declaratie gebruikt wordt, ontstaat er een nieuwe variabele. Denk bijvoorbeeld aan een declaratie in een recursieve functie: iedere keer dat de functie uitgevoerd wordt ontstaan er bij de declaraties in de functie nieuwe variabelen.

### Toewijzing (assignment)

Bij een toewijzing (vaak assignment genoemd) wordt er een waarde aan de variabele toegekend. Dezelfde variabele kan vaker een waarde toegewezen krijgen en kan dus verschillende waarden hebben in de loop van het programma.
Bij sommige programmeertalen moet een variabele gedeclareerd worden voordat er een waarde aan toegewezen wordt. Bij andere programmeertalen is declaratie niet nodig en dient de eerste toewijzing van een waarde aan een variabele als impliciete declaratie van deze variabele.

### Gebruik

Wanneer een variabele voorkomt in een expressie wordt hij gebruikt. De variabele wordt dan vervangen door de waarde die de variabele op dat moment heeft (dat wil zeggen: de inhoud van de geheugenlocatie waar de variabele naar verwijst, geïnterpreteerd in overeenstemming met het type van de variabele).
Sommige talen vereisen dat een variabele gedeclareerd is en een waarde gekregen heeft, voordat de variabele gebruikt wordt. Andere talen vereisen enkel dat een variabele een waarde toegewezen gekregen heeft voor deze gebruikt wordt. Er zijn ook talen waarin dit niet nodig is: in zulke talen heeft ieder type variabele een defaultwaarde totdat er een expliciete toewijzing plaatsvindt.

## Typering: statisch of dynamisch

Iedere variabele is op ieder moment van zijn levensduur geassocieerd met een type. Hoe dit gebeurt hangt af van de regels die de programmeertaal hierbij hanteert: het typesysteem. Sommige talen vereisen dat het type van een variabele via een declaratie expliciet door de programmeur gespecificeerd wordt. Bij zulke talen is voordat het programma uitgevoerd wordt al bekend welke typen alle variabelen (en de expressies waarin deze variabelen gebruikt worden) hebben. Dit wordt statische typering genoemd.
In dynamisch getypeerde programmeertalen hoeft het type van een variabele niet expliciet gespecificeerd te worden. Ook in zulke talen heeft iedere variabele op ieder moment een specifiek type, maar welk type dit is wordt pas bepaald tijdens de uitvoering van het programma.