cursus.

Cours 1 · Notions de baseLeçon 2 sur 3

Variables et affectation

20 min de lecture5 sections Version PDF

À la fin de cette leçon, vous saurez

Comprendre l'affectation comme un remplacement, et échanger le contenu de deux variables.

Une variable est un casier nommé dans la mémoire. Le nom sert à le désigner, le casier contient une valeur, et cette valeur peut changer au cours de l'exécution — d'où le nom.

Trois choses à ne jamais confondre : le nom (somme), le contenu (42), et le type (entier). Le nom ne change jamais. Le contenu change à chaque affectation. Le type est fixé à la déclaration et engage tout le reste.

Variables    age : entier    taille : réel    nom : chaîne    majeur : booléen

Un casier peut être vide au départ : déclarer réserve la place, cela ne met rien dedans. Utiliser une variable jamais affectée, c'est lire un casier dont on ne sait pas ce qu'il contient — une des sources d'erreur les plus pénibles à diagnostiquer, parce que le programme ne plante pas forcément, il donne juste un résultat faux.

L'affectation est un remplacement, pas une équation

x ← 5 ne signifie pas « x égale 5 » mais « mets 5 dans x ». La nuance est décisive :

x ← 5x ← 8

Après ces deux lignes, x vaut 8. Le 5 n'est plus nulle part. L'affectation écrase : elle ne cohabite pas avec l'ancienne valeur, elle la détruit. Un casier ne contient qu'une chose à la fois.

C'est ce qui rend possible une ligne comme celle-ci, qui n'a aucun sens en mathématiques :

x ← x + 1

Appliquez la règle de la leçon 1 — la droite d'abord. Si x vaut 7 : on évalue 7 + 1, ce qui donne 8, puis on range 8 dans x. La ligne se lit « augmente x de 1 ». Sans la règle de la droite d'abord, elle ressemble à l'équation absurde x=x+1x = x + 1 ; avec elle, elle est limpide.

Quiz · vérifiez votre compréhension Sans réponse

Après x ← 5, puis y ← x, puis x ← 8, que vaut y ?

Échanger deux variables

Voici le problème le plus instructif de toute la leçon. On a a = 5 et b = 9, on veut finir avec a = 9 et b = 5. La solution qui vient naturellement est fausse — et la raison de son échec est exactement la propriété d'écrasement qu'on vient de voir.

Animation · étape 1 / 50:00 / 0:08

Objectif de l'algorithme : finir avec a = 9 et b = 5.

Prêt à lancer · 0:00 / 0:08
Étapes

Regardez bien l'étape 3. Au moment où a ← b s'exécute, la valeur 5 disparaît de la mémoire. Elle n'est nulle part ailleurs : elle est perdue. L'étape 4 essaie de la rendre à b, mais elle n'existe plus. On finit avec deux fois 9.

La solution demande un troisième casier, dont le seul rôle est de garder la valeur menacée le temps de l'opération.

Animation · étape 1 / 60:00 / 0:09

Même point de départ que la version ratée, avec un casier de plus.

Prêt à lancer · 0:00 / 0:09
Étapes

Retenez le schéma en trois temps, il resservira au chapitre sur les tris : sauvegarder — écraser — restituer.

tmp ← aa ← bb ← tmp

Trois affectations, jamais moins, et l'ordre n'est pas négociable : intervertir deux de ces lignes ramène le bug de la version ratée.

Quiz · vérifiez votre compréhension Sans réponse

Pourquoi la version sans variable temporaire échoue-t-elle ?

Quiz · vérifiez votre compréhension Sans réponse

Que vaut somme après : somme ← 0 ; somme ← somme + 3 ; somme ← somme + 4 ?

Les types

Le type d'une variable détermine les valeurs qu'elle peut contenir et les opérations qui ont un sens sur elle.

TypeContientOpérations typiques
entier0, 42, −7+, , ×, division entière, modulo
réel3.14, −0.5+, , ×, /
chaîne"bonjour"concaténation, longueur
booléenVRAI, FAUXET, OU, NON

Deux pièges valent le détour. D'abord, + ne veut pas dire la même chose partout : 3 + 4 vaut 7, mais "3" + "4" vaut "34" — la même opération sur des chaînes colle les morceaux bout à bout. Ensuite, la division entière n'est pas la division : 7 / 2 vaut 3.5 en réels, et 7 ÷ 2 vaut 3 en entiers. Cette division entière n'est pas un détail technique ; c'est elle qui fera fonctionner la recherche dichotomique à la leçon 6.

À vous

Exercice · JavaScript · à vous de jouer

Échangez a et b avec une variable temporaire. Sans l'échange simultané de JavaScript.

En attente
// Échangez le contenu de a et b.
// Interdit : l'écriture [a, b] = [b, a], qui masque justement le mécanisme
// qu'on cherche à comprendre. Trois affectations, pas une de moins.
let a = 5;
let b = 9;

// à compléter

console.log(a, b); // attendu : 9 5

Console de sortie
Le résultat s'affiche dans la console

À retenir

Flashcards · 1 / 2Toucher pour retourner
Fin de la leçon

Vous avez parcouru les 5 sections.

Marquez-la terminée pour faire avancer votre parcours, ou revenez sur un point avant de passer à la suite.