Programmation/Variables
La variable est un concept important en programmation informatique. Intuitivement, il s'agit d'un nom qui se réfère à une chose. Informatiquement, c'est une référence à une adresse mémoire.
Il s'agit d'une entité créée dans l'ordinateur à laquelle on donne un nom et qu'on utilise en évoquant ce nom dans le code source du programme, capable de contenir des informations dont la valeur peut varier au cours du temps selon les manipulations que le programme lui fait subir.
Ces informations peuvent être de types très différents, ainsi lorsqu'une variable contient le nom d'une ville, une autre pourra par exemple contenir un tableau statistique, ou bien simplement le résultat d'un calcul effectué au sein du programme. Pour la définition exacte de la variable, se reporter à la section détaillant les mécanismes des variables au niveau système.
Usage des variables
[modifier | modifier le wikicode]Concrètement, lorsqu'on veut par exemple calculer l'aire d'un rectangle à partir de sa longueur et sa largeur, on crée un programme qui demande d'abord la création de deux variables qu'on baptise longueur
et largeur
en précisant l'espace qu'ils vont occuper dans l'ordinateur au moyen de mots clés universels comme int
ou float
(voyez le chapitre sur les types de données pour de plus amples détails). Après avoir créé les variables, on leur attribue les valeurs de longueur et largeur souhaitées, puis on lance un calcul effectuant la multiplication entre les deux variables. On peut ensuite stocker le résultat correspondant de fait à l'aire du rectangle dans une des deux premières variables, mais il est plus propre de créer une troisième variable aire
dédiée à contenir la valeur de l'opération effectuée par l'ordinateur. Ce n'est que le goût, la nécessité ou la convention de codage du programmeur (ou de l'équipe de développement) qui détermine l'architecture finale du programme.
Niveau système
[modifier | modifier le wikicode]Au niveau système , une variable occupe un certain nombre de bits [1] en mémoire. Elle occupe donc une zone dont l'adresse correspond à celui du premier mot stockant la valeur qu'elle contient.
Exemple avec une variable de type entier sur 32 bits (soit 4 octets) :
NOMBRE: ENTIER = 12345
- La valeur correspondante en hexadécimal sur 32 bits est :
00003039h
- En supposant que la variable occupe les emplacements (adresses) 100, 101, 102 et 103, ceux-ci contenant chacun 1 octet, contiennent les valeurs suivantes :
- sur une machine dont le processeur stocke d'abord l'octet de poids faible (little endian byte order en anglais) :
Adresse 100
101
102
103
Contenu 39h
30h
00h
00h
- sur une machine dont le processeur stocke d'abord l'octet de poids fort (big endian byte order en anglais) :
Adresse 100
101
102
103
Contenu 00h
00h
30h
39h
L'emplacement de cette variable est déterminée :
- À la compilation du programme, en général, relativement au début de la section de données allouée par le système, c'est à dire que le compilateur détermine un décalage (offset) ;
- À l'exécution de l'application, lorsque le système alloue la section de données correspondante (en lui attribuant une adresse absolue en mémoire).
L'utilisation conjointe de ces deux informations donne l'adresse absolue de la variable en mémoire :
adresse variable = adresse absolue de la zone de données + décalage
Cette adresse est utilisée lors des opérations de lecture et d'écriture.
La machine n'a pas besoin d'enregistrer le type de la variable. Le type n'est utilisé que pour déterminer comment la variable peut être manipulée par les instructions (lecture, écriture, calculs, nombre de bits occupés en mémoire). Cependant certains langages interprétés ou des langages de programmation permettant la réflexion enregistre le type comme information supplémentaire pour d'autres opérations (vérification, duplication, instanciation, ...).
Lors de l'exécution de l'application, la zone de données n'est pas toujours initialisée à zéro. En effet, cet emplacement a pu être allouée antérieurement à une autre application, et contient donc des valeurs utilisées par celle-ci. Cependant, pour des raisons évidentes de sécurité[2], les systèmes modernes initialisent à zéro les zones allouées aux applications.
En langage machine, accéder à une variable correspond à écrire l'adresse de la variable sur le bus d'adresse, et lire ou écrire sur le bus de données la valeur correspondante.
La valeur est toujours binaire à l'intérieur de la machine : stockage, opérations. La conversion en d'autres bases (octal, décimal, hexadécimal) n'est faite que lors de la présentation de la valeur à l'utilisateur, ou lors de sa saisie par l'utilisateur.
Les variables sont utilisées pour :
- stocker des valeurs, des résultats dans le temps, pour les utiliser ultérieurement,
- transmettre des valeurs à des fonctions,
- stocker des résultats intermédiaires dans une séquence de calculs, notamment lorsque ce résultat est utilisé plusieurs fois dans une expression.
Notes
[modifier | modifier le wikicode]- ↑ Un bit peut valoir 0 ou 1, et correspond à un état électrique (niveau haut / niveau bas, circuit ouvert / circuit fermé). Les bits sont généralement regroupés en mots, on parle d'octets lorsqu'un mot regroupe 8 bits.
- ↑ De nombreux programmes espions ont utilisé cette fonctionnalité pour récupérer des informations sensibles notamment des mots de passe.