Comprendre les variables et la notion de « type »

Contexte

L’algorithmie va s’atteler à résoudre des problèmes à l’aide d’une suite d’opérations élémentaires. Nous voulons utiliser la puissance de calcul de la machine et l’algorithmie va nous permettre d’organiser nos idées pour lui faire comprendre ce que nous attendons d’elle. Cette puissance de calcul va nous aider, par exemple, à résoudre des problèmes scientifiques complexes, mais aussi effectuer des prévisions grâce à un gros volume de données. À chaque fois que le volume de données sera important, ou que les opérations seront complexes, l’ordinateur sera un allié de choix. Il ne faut pas confondre l’algorithmie avec la programmation. La programmation est la mise en application d’un algorithme.

Dans cette première partie, nous allons parler des types de données et des types de variables. Il s’agit d’une notion très importante puisqu’elle va nous permettre d’indiquer à la machine ce que représentent les données que nous lui demandons de manipuler. C’est grâce aux types qu’elle va savoir quelles opérations elle est autorisée à réaliser.

Qu’est-ce qu’une variable ?

Définition

Une variable va nous permettre de stocker temporairement une valeur dans la mémoire de l’ordinateur. Vous avez calculé un taux de croissance, un total de facture ou la solution d’une équation complexe, et vous voulez sauvegarder le résultat pour pouvoir le réutiliser. C’est ici que rentre en jeu la notion de « variable ». Une variable a donc deux fonctions essentielles :

  • Stocker une valeur en mémoire,

  • Pouvoir récupérer une valeur stockée préalablement.

Si on veut pouvoir accéder à la valeur d’une variable, il va falloir trouver un moyen d’y faire référence. Cette référence va se faire à travers le nom de la variable. Le choix du nom de la variable est laissé à la libre appréciation des développeurs. Dans la mesure du possible, il est judicieux de la nommer, de telle façon à comprendre immédiatement ce qu’elle contient :

  • températureMoyenne

  • distanceMin

  • vitesseMax

Attention

Les langages de programmation imposent souvent des contraintes sur les noms des variables. Par exemple, ils doivent commencer par une lettre. Les noms des variables ne peuvent pas non plus être des mots-clés du langage (« if », « then », « else », « for », « while », etc.). Cela risquerait de rendre votre programme incompréhensible.

Complément

Il ne faut pas non plus confondre les variables et les constantes, même si ces deux éléments partagent quelques propriétés. Une constante est une variable dont il n’est plus possible de modifier la valeur. Cela permet au développeur d’être certain que la valeur fixée au départ reste la même jusqu’à la fin du programme. Les constantes servent notamment à sauvegarder des constantes mathématiques comme : PI, e.

Nous allons voir qu’en plus de la valeur et d’un nom, une variable va être définie par son « type ». Le type va nous amener encore une information supplémentaire sur la nature de la donnée contenue dans la variable.

Quelles informations comprend la machine ?

Si on ouvre l’unité centrale d’un ordinateur, nous ne trouverons pas quelque chose qui ressemble à un cerveau humain, mais nous nous retrouverons en présence d’un enchevêtrement de câbles et de circuits électriques.

Schéma simplifié de l’unité centrale d’un ordinateur

La construction même de l’ordinateur va nous permettre de comprendre ce que la machine est capable de manipuler. L’information est véhiculée sous forme de signal électrique.

Nous ne pouvons faire passer par un câble électrique que deux informations différentes : soit le courant passe dans le câble, soit il ne passe pas. Cela semble bien peu, mais si nous utilisons deux câbles, nous pouvons faire passer 4 informations différentes.

Câble 1

Câble 2

Passe pas

Passe pas

Passe pas

Passe

Passe

Passe pas

Passe

Passe

Par convention, nous allons utiliser le 1 pour dire que du courant passe par le câble, et 0 pour dire qu’il ne passe pas. Une information devient donc une succession de 0 et de 1.

Câble 1

Câble 2

0

0

0

1

1

0

1

1

Remarque

À chaque fois que nous ajoutons un câble, le nombre d’informations différentes que nous pouvons propager est multiplié par 2. Le nombre d’informations différentes peut donc être exprimé à l’aide de puissance de 2 :

1 câble = 2 informationsn = 2^1

2 câbles = 4 informations = 2^2

3 câbles = 8 informations = 2^3

8 câbles = 256 informations = 2^8

Attention

L’information transmise par un câble est appelée « bit ». On comprend donc facilement les notions de 32 bits ou 64 bits. 32 bits permettent de propager 2^32 informations différentes alors que 64 bits permettent de propager 2^64 informations différentes. Les systèmes 64 bits ont donc une meilleure précision lorsqu’il s’agit de travailler avec des nombres.

8 câbles ou 8 bits représentent un octet. Un octet en anglais se dit « byte », qu’il ne faut donc pas confondre avec le bit (8 bits = 1 byte = 1 octet).

Exemple

Imaginons maintenant que nous aimerions représenter un nombre entier. La représentation binaire est parfaitement adaptée à cela. Nous pouvons donc associer à chaque nombre entier le nombre binaire qui lui correspond.

L’ordinateur est donc naturellement fait pour manipuler des nombres. Si nous voulons utiliser des nombres entiers signés, il suffit de considérer que l’un des bits contient le signe (0 : nombre négatif ; 1 : nombre positif). Une représentation de 8 bits peut nous permettre de représenter 256 nombres positifs (de 0 à 255), ou 128 nombres négatifs (de -128 à -1), et 128 nombres positifs (de 0 à 127). Le fait d’utiliser un bit pour le signe limite donc à 7 bits la partie disponible pour représenter le chiffre.

Représenter un nombre réel va revenir à utiliser un nombre de bits pour représenter un exposant. Cette partie sera plus détaillée par la suite. Enfin, si la machine arrive à manipuler facilement les nombres, les caractères vont poser plus de problèmes. Mais là encore, l’ordinateur va convertir les caractères en nombres à l’aide d’une table de conversion : la table ASCII.

Nous venons de voir que l’ordinateur sait uniquement manipuler des nombres entiers, et il va convertir tous les éléments que nous lui fournissons en nombre entier.

Rappel

La compréhension du fonctionnement de la machine nous permet déjà de comprendre comment l’information est échangée, mais aussi pourquoi le binaire est si important pour les informaticiens. Nous verrons qu’en plus du binaire, d’autres bases ont leur importance, comme l’octal ou l’hexadécimal. Ces deux bases sont en fait également à base de puissance de 2 :

Octal : base 8 = 2^3

Hexadécimal : base 16 = 2^4

Les types donnent du sens aux nombres

Le type permet de donner une signification au contenu de la variable. Nous avons vu que la machine va convertir toutes les notions manipulées en nombre entier. Pour pouvoir faire le chemin en sens inverse, et retourner la valeur correcte au développeur, il est nécessaire de savoir de quel type de valeur il s’agit.

Exemple

En tant qu’être humain, nous arrivons facilement à faire la différence entre les différentes notions que nous manipulons. Toutefois, à certains moments, un complément d’information peut nous aider à comprendre ce que représente un chiffre.

Nombre

Signification

75000

Code postal

0102030405

Téléphone

12345123451234567890112

RIB

Sans cette information, il serait parfois difficile de définir de quel type d’information il s’agit. Il en est de même pour les variables. L’ordinateur a besoin de connaître le type manipulé pour savoir ce qu’il peut en faire. Par exemple, nous savons qu’il n’est pas possible d’additionner 2 caractères. En précisant le bon type à la machine, elle saura aussi comment réagir face à un caractère.

Si nous prenons la table ASCII, et que nous voulons convertir le caractère « A », nous allons voir que « A » se convertit en la valeur entière 65. Que le développeur stocke la valeur 65 ou ‘A’ dans une variable, le programme va stocker la représentation binaire de 65 en mémoire. Pour récupérer le caractère « A », il faut indiquer que ce que l’on attend est un caractère, et ceci se fait au travers des types.

Un type est donc juste une information sur la variable, qui permet de communiquer une information sur la nature de son contenu. En algorithmie, les variables que nous utilisons sont déclarées en en-tête de l’algorithme. Les types sont systématiquement donnés pour les variables que nous utilisons :

Variable :

   n : entier

   c : chaîne de caractères

   b : Booléen

   d :décimal

 

Début

Fin

Rappel

Nous détaillerons ces types dans la partie suivante. Pour l’instant, gardons à l’esprit qu’il existe des types simples :

  • Entier : nombre entier, signé ou non ;

  • Chaîne de caractères : suite de caractères ;

  • Booléen : variable issue de l’algèbre booléenne valant soit VRAI, soit FAUX ;

  • Décimal : nombre à virgule.

Nous verrons qu’il existe des types de variables plus complexes comme les tableaux. Enfin, « la programmation orientée objet » nous permettra de déclarer nos propres types. En entreprise par exemple, nous travaillons avec des clients, des fournisseurs, sur des articles, plutôt qu’avec des entiers, des réels et des booléens. La programmation orientée objet permet de développer des types, en adéquation avec les entités manipulées. Le but est de pouvoir définir une variable de type « Client », ou une variable de type « Fournisseur ».

Cela permet, dès le départ, de comprendre ce que nous pourrons faire avec ces variables. Les entiers pourront être additionnés, les chaînes de caractères concaténées (création d’une nouvelle chaîne de caractères contenant les deux chaînes mises bout à bout). Il sera donc plus facile de savoir comment manipuler les différentes données.

Typage implicite et typage explicite

Certains langages de programmation imposent un typage explicite, ce qui veut dire que vous êtes obligés de spécifier le type de la variable. Cela est vrai par exemple pour le C++ :

Int a ; // Déclaration d’une variable « a » de type entier (int : integer)

Double b ; // Déclaration d’une variable « b » de type réel (double)

D’autres langages utilisent un typage implicite, ce qui veut dire que le type est déterminé à la première utilisation de la variable. C’est le cas de Python :

a = 2 # 2 étant un entier, Python considère que la variable qui va stocker cette valeur sera également de type entier (int : integer)

b = 2.5 # 2.5 étant un réel, Python considère que la variable qui va stocker cette valeur sera également de type réel (double)

Remarque

Ce n’est pas parce que le typage des variables est implicite que les variables ne sont pas définies par un type. Il s’agit juste de deux façons différentes d’associer un type à une variable. Pour preuve, vous pouvez utiliser la fonction type () en Python pour déterminer le type d’une variable. Python est donc bien un langage qui se repose sur les types de variables comme le C++.

Si vous installez Python, vous installez également IDLE qui est un interpréteur de commandes Python. Ouvrez IDLE, et tapez les commandes suivantes.

Python indique que « a » est un entier (int), alors que « b » est un réel (float). Il a donc su déterminer le type en fonction de la valeur de la variable.

Complément

Pour plus d’information sur l’installation de Python, rendez-vous sur le site officiel : https://www.python.org/downloads/