vendredi 10 novembre 2017

Affectation et égalité

Confondre entre l'égalité et l'affectation n'est pas rare chez les nouveaux étudiants de la branche. Heureusement, cette confusion finit par disparaître au bout de quelques exercices; mais, des fois, elle persiste.

La cause principale de cette confusion est le lien avec les mathématiques. Cette même cause sera le remède. Le signe utilisé "=", est souvent utilisé pour désigner l'égalité. Mais, en revoyant les maths, est-il vraiment le cas ?

Oublions l'informatique, et revenons vers les math. Le signe "=" est utilisé dans deux types de phrase et n'est jamais mis seul, sans explications.

Le premier type de phrases est du genre :

  • x ∈ N ... (un peu plus loins)... Supposons que x = 1.
  • x ∈ N ... (un peu plus loins)... On met x = 1.
Dans les deux cas, le signe "=" ne peut pas être vu sans le "Supposons que" et "On met". Ainsi, ce type de phrases permet de préciser la valeur exacte de x dans l'ensemble (ou l'intervalle) de définition.

Le deuxième type de phrase est du genre :

U(n) = U(n - 1) + 5 .... si n > 1
            0 ... si n = 1

Dans cette définition (d'une suite), on voit que nous ne connaissons pas la valeur de n, alors on donne les différentes possibilités selon la valeur de n. Cette valeur c'est à "l'utilisateur" de fournir plus tard. Dans ce cas aussi, le signe "=" ne peut pas être vu sans le "si" qui le précède.

En algorithmique (ou en programmation si vous voulez), c'est exactement la même chose :
  • Des fois, on connaît la valeur de notre variable et on veut la préciser à notre programme. Là, il s'agit de l'affectation.
  • Des fois, on ne connaît pas la valeur de la variable au moment de l'écriture du programme; elle sera donnée par l'utilisateur via le clavier, lue à partir d'un fichier ou récupérée depuis Internet, peu importe sa source, l'essentiel c'est qu'on ne connaît pas cette valeur. Ainsi, on demande au programme de vérifier si elles est égale à telle ou telle valeur. Là, il s'agit de la comparaison.
Et puisque nous n'avons pas le luxe d'ajouter des phrases telles que "Supposons que" dans notre code, la solution était de proposer deux signes différents pour distinguer les deux opérations :

En pascal :

a := 4 { définir la valeur de la variable a, affectation }
a = 4 { vérification si la variable a est égale à la valeur, égalité }

En Java :


a = 4 // Définir la valeur de la variable a, affectation
a == 4 // Vérifier si la variable a est égale à la valeur précisée, égalité