Notion de variable et de type


La notion de variable existe dans tous les langages de programmation. Dans cette partie du cours nous la présentons sans tenir compte du langage étudié.



Les variables

Les variables servent à conserver temporairement des données en mémoire.

Une variable peut être vue comme une plage mémoire dans une zone de données d'un programme. Elle porte un nom et possède à un instant donné une valeur.

On peut donc parler de l'adresse d'une variable: c'est l'adresse du début la plage mémoire qui lui est réservée.

Voici par exemple quatre variables nommées Age, Nom, NombreEnfant et Prenom.

DefVariable.jpg, 41kB

La valeur d'une variable varie lors de l'exécution d'un programme (d'où le nom de variable justement !). La variable NombreEnfant pourra par exemple valoir successivement 2, 0, 3, 1, 0, 4,...

Par contre, le nom d'une variable ne change pas : il est le même du début à la fin de l'exécution d'un programme.

La notion de type

Il existe différents types de variables.

Le type d'une variable définit la manière dont elle est représentée en mémoire et les opérations que l'on peut faire dessus.

La représentation en mémoire d'une variable dépend donc de son type. En particulier, deux variables de types distincts n'occupent pas en général la même place mémoire.

Types représentant du texte

Il existe par exemple dans tous les langages un type représentant les chaines de caractères. Les variables de ce type servent à stocker du texte en mémoire. La variable Prenom pourrait par exemple être de ce type. A un instant donné, sa valeur pourrait être "Astérix", à un autre moment "Obélix" ou encore à un autre moment "Abraracourcix".

Les chaines de caractères sont généralement codées en ASCII.

Types numériques

Un autre exemple important est celui des types numériques, indispensables pour pouvoir représenter des nombres et effectuer des calculs. Ils se distinguent entre autres par la place mémoire occupée (1, 2, 4 ou 8 octets en général) et par la nature du codage.

Certains types numériques ne permettent de coder que des nombres entiers. Le codage utilisé ici est celui dont nous avons déjà parlé (voir codage des nombres entiers en base 2), mise à part la présence éventuelle d'un bit de signe pour les types permettant de représenter des entiers relatifs (négatifs ou positifs).

D'autres types numériques permettent de représenter des nombres 'à virgule' et donc pas forcément entiers. Le codage utilisé pour ces types numériques est la virgule flottante. Il est basé sur la notation scientifique d'un nombre avec une mantisse et un exposant. En base 10, le nombre 30150, s'écrit par exemple 3.015 104 en notation scientifique. Dans cet exemple, la mantisse est 3.015 et l'exposant est 4. La virgule flottante est l'utilisation du même principe en base 2: une partie des bits codant le nombre représente la mantisse et une autre l'exposant.

Le type numérique que l'on choisit détermine la précision des calculs ainsi que la dimension maximale des nombres. En général, plus la précision est grande et plus le temps de calcul est important. Mais quelque soit le type choisi, la précision et la taille maximale des nombres gèrables sera toujours limitée !.

Exemple

Le schéma suivant montre un codage possible pour une variable Age de type numérique et une variable Prenom de type chaine de caractères. La valeur de la variable Age est 27 et son codage en base 2 occupe une plage mémoire de deux octets. La valeur de la variable Prenom est "Jimi" et son codage en ASCII occupe une plage mémoire de cinq octets (un octet pour chaque lettre et le caractère nul pour terminer la chaine). La suite des quarante bits représentant cette chaine s'explique par le codage ASCII: les huit premiers bits sont la représentation du caractère 'J' (vu comme un entier en base 2, ce serait 74), les huit bits suivants sont la représentation du caractère 'i' (vu comme un entier en base 2, ce serait 109), ...

On voit donc que la représentation mémoire d'un nombre entier est très différente de celle d'une chaine de caractères. Celle d'un entier est de dimension fixe (ici 2 octets), alors que celle d'une chaine de caractères est variable puisqu'elle dépend du nombre de caractères présents dans la chaine.

D'autre part, les opérations que l'on peut faire sur deux variables de types différents ne sont pas les mêmes. Par exemple on ne pourra pas multiplier deux chaines de caractères, alors que l'on peut très bien multiplier deux entiers.

Déclaration d'une variable

La déclaration d'une variable sert à définir son type et par conséquent la manière dont elle sera représentée en mémoire. Elle a pour effet de réserver une plage mémoire pour stocker la valeur de cette variable. Le type de la variable définit la taille de cette plage et la manière de coder ses valeurs.

Dans certains langages (comme Pascal, Java ou C++), toute variable doit être déclarée avant de pouvoir être utilisée. D'autres langages (comme Php ou Python par exemple) autorisent une déclaration implicite avec un type par défaut. Malheureusement, cela autorise également des erreurs de programmation ....

La manière de déclarer une variable dépend évidemment du langage de programmation, mais on y trouve toujours les mêmes ingrédients : le nom de la variable et son type.

Valeur par défaut

Dans de nombreux langages, la déclaration d'une variable n'a pas seulement pour effet de lui réserver une plage mémoire, mais également de stocker dans cette plage mémoire une valeur par défaut dépendant du type de la variable (0 par exemple pour une variable numérique).