L’instruction d’affectation
Une fois la variable déclarée, il est nécessaire de stocker une valeur à l’emplacement mémoire désigné. Pour ce faire, nous utilisons l’instruction d’affectation, qui nous permet d’initialiser ou de modifier, en cours d’exécution du programme, le contenu de l’emplacement mémoire (le contenu d’une variable n’étant, par définition, pas constant).
Rôle et mécanisme de l’affectation
L’affectation est le mécanisme qui permet de placer une valeur dans un emplacement mémoire. Elle a pour forme :
Variable = Valeur ;
ou encore,
Variable = Expression mathématique ;
Le signe égal (=) symbolise le fait qu’une valeur est placée dans une variable. Pour éviter toute confusion sur ce signe mathématique bien connu, nous prendrons l’habitude de le traduire par les termes prend la valeur.
Examinons les exemples suivants, en supposant que les variables n et p soient déclarées de type entier : n = 4 ; //n prend la valeur 4 p = 5*n+1 ; //calcule la valeur de l’expression mathématique soit 5*4+1 //range la valeur obtenue dans la variable représentée par p. L’instruction d’affectation s’effectue dans l’ordre suivant : 1. Calcule la valeur de l’expression figurant à droite du signe égal ; 2. Range le résultat obtenu dans la variable mentionnée à gauche du signe égal. D’une manière générale, il est intéressant de remarquer que la variable placée à droite du signe = n’est jamais modifiée, alors que celle qui est à gauche l’est toujours. Comme une variable de type simple ne peut stocker qu’une seule valeur à la fois, si la variable située à gauche possède une valeur avant l’affectation, cette valeur est purement et simplement remplacée par la valeur située à droite du signe =.
Exemple
a = 1 ; b = a + 3 ; a = 3 ; Lorsqu’on débute en programmation, une bonne méthode pour comprendre ce que réalise un programme consiste à écrire, pour chaque instruction exécutée, un état de toutes les variables déclarées. Il suffit pour cela de construire un tableau dont chaque colonne représente une variable déclarée dans le programme et chaque ligne une instruction de ce même programme. Soit, pour notre exemple :
Le tableau est composé des deux colonnes a et b et des trois lignes associées aux instructions d’affectation du programme. Ce tableau montre que les instructions a = 1 et a = 3 font que la valeur initiale de a (1) est effacée et écrasée par la valeur 3.
Déclaration et affectation Comme nous l’avons vu à la section «Déclarer une variable», la déclaration est utilisée pour réserver un emplacement mémoire. Une fois réservé, l’emplacement reste vide jusqu’à ce qu’une valeur y soit placée par l’intermédiaire de l’affectation. Il est cependant risqué de déclarer une variable sans lui donner de valeur initiale. En effet, le compilateur Java vérifie strictement si toutes les variables contiennent une valeur ou non. Une erreur de compilation est détectée dès qu’une seule variable ne contient pas de valeur à un moment donné du programme.
instruction a b
a = 1 1b = a + 3 14 a = 3 34
Initialiser une variable Pour éviter toute erreur de compilation, une bonne habitude consiste à initialiser toutes les variables au moment de leur déclaration, en procédant de la façon suivante : float f1 = 0.0f, f2 = 1.2f ; // Initialisation de deux float long CodeBar = 123456789 ; // Initialisation d’un long int test = 0 ; // Initialisation d’une variable de type int boolean OK = true ; // Initialisation d’un boolean De cette façon, les variables fl, f2 , CodeBar et OK sont déclarées. Le compilateur réserve un emplacement mémoire pour chacune d’entre elles. Grâce au signe d’affectation, le compilateur place dans chacun des emplacements mémoire respectifs les valeurs données. Initialiser une variable de type char Les variables de type char s’initialisent d’une façon particulière. Supposons que l’on souhaite déclarer et placer le caractère n dans une variable choix de type char. Pour cela, écrivons l’instruction de déclaration et d’initialisation suivante :
char choix = n ; Pour le compilateur, cette instruction est problématique, car il considère n non pas comme le «caractère n» mais comme une variable appelée n. Pour lever cette ambiguïté, nous devons entourer le caractère n d’apostrophes, de la façon suivante : char choix = ’n’ ; Ainsi, des données telles que ’a’, ’*’, ’$’, ’3’, ’:’ ou ’?’ sont considérées comme des caractères. Par contre c = ’ab’ ne peut s’écrire, car ’ab’ n’est pas un caractère mais un mot de deux caractères. Nous devons, dans ce cas, utiliser une variable de type String.
Voir, au chapitre 7, «Les classes et les objets», la section «La classe String, une approche vers la notion d’objet».
Quelques confusions à éviter Le symbole de l’affectation est le signe égal (=). Ce signe, très largement utilisé dans l’écriture d’équations mathématiques, est source de confusion lorsqu’il est employé à contre-sens. Pour mieux nous faire comprendre, étudions trois cas : 1. a = a + 1 ; Si cette expression est impossible à écrire d’un point de vue mathématique, elle est très largement utilisée dans le langage informatique. Elle signifie : – calculer l’expression a + 1 ;
– ranger le résultat dans a. Ce qui revient à augmenter de 1 la valeur de a. 2. a + 5 = 3 ; Cette expression n’a aucun sens d’un point de vue informatique. Il n’est pas possible de placer une valeur à l’intérieur d’une expression mathématique, puisque aucun emplacement mémoire n’est attribué à une expression mathématique. 3. a = b ; et b = a ; À l’inverse de l’écriture mathématique, ces deux instructions ne sont pas équivalentes. La première place le contenu de b dans a, tandis que la seconde place le contenu de a dans b.
Échanger les valeurs de deux variables Nous souhaitons échanger les valeurs de deux variables de même type, appelées a et b ; c’est-à-dire que nous voulons que a prenne la valeur de b et que b prenne celle de a. La pratique courante de l’écriture des expressions mathématiques fait que, dans un premier temps, nous écrivions les instructions suivantes :
a = b ; b = a ; Vérifions sur un exemple si l’exécution de ces deux instructions échange les valeurs de a et de b. Pour cela, supposons que les variables a et b contiennent initialement respectivement 2 et 8.