Les variables tableau

Écrit par Jean-Michel CHRISOSTOME. Publié dans Blog

Cet article, sera le dernier de la série sur les variables traitera d'un type de variable très utile que sont les variables tableaux ou array en anglais.

Voici comment une variable tableau pourraît être représentée:

Numéro ou IndexValeur
0Albert
1André
2Bertrand
3Corinne
4Félicie
x...

Une variable tableau est une liste de données rangées sous la forme d'un tableau indicé. Par exemple l'indice 0 contient Albert, l'indice 3 contient Corinne.

Voici la définition d'un tableau destiné à contenir 5 entiers en C:

 
// Définition de 5 emplacements pour entiers
int monTableau[5];
 
// Initialisation des emplacements (== indices)
// Premier emplacement
monTableau[0]=101;
// Second emplacement
monTableau[1]=102;
// Troisième emplacement
monTableau[2]=103;
// nième emplacement
monTableau[n-1]=nnn;
 

Si l'indice x de la variable monTableau est modifié à x + 1, alors le curseur en mémoire avancera de la taille d'un int. A l'inverse, si l'indice est modifié à x - 3, alors le curseur reculera de 3 fois la taille d'un int. Survolez les int présents dans le tableau ci-dessous.

Chaque int pesant (hypothèse sur un système 32 bits) 4 octets, lorsqu'on avance d'un int, on déplace le curseur de 4 octets en mémoire.

En C le type chaîne de caractères n'existe pas comme on peut le trouver dans les autres langages. Il s'agit en fait d'un tableau de caractères qui peut se définir comme suit:

 
// On réserve 20 caractères
char maChaine[20];
 
// On réserve 11 caractères et on initialise le contenu de la variable
// Oui 11 et pas 10 car en C une chaîne doit se terminer par le caractère \0
// Il faut donc toujours prévoir un caractère de plus par rapport à la taille de la chaîne à contenir
char maChaine[]="Bonjour!!!";
// Equivalent de:
char maChaine[32];
maChaine[0]='B';
maChaine[1]='o';
maChaine[2]='n';
maChaine[3]='j';
maChaine[4]='o';
maChaine[5]='u';
maChaine[6]='r';
maChaine[7]='!';
maChaine[8]='!';
maChaine[9]='!';
maChaine[10]='\0';
/* ... etc ... */
// Equivalent de:
char maChaine[]={ 'B', 'o', 'n', 'j', 'o', 'u', 'r', '!', '!', '!', '\0' };
 
printf("%c - %c - %c", maChaine[0], maChaine[1], maChaine[2]); // Affichera B - o - n
 

Tous les types de variables peuvent être ordonnés en tableau. On retrouve les tableaux dans la majorité des langages de programmation modernes. Il est possible également de créer des tableaux contenant des tableaux. Attention toutefois à ne pas sombrer dans la complexité et ne perdez jamais de vue que tout cela a un coût en mémoire.

Définition de deux tableaux en PHP:

 
// Tableau indicé
$epices=array('poivre', 'cumin', 'piment', 'coriandre', 'curry');
// Equivalent de
$epices=array();
$epices[0]='poivre';
$epices[1]='cumin';
$epices[2]='piment';
$epices[3]='coriandre';
$epices[4]='curry';
 
echo "Un peu de ".$epices[2]."?"; // Affichera: Un peu de piment?
 
// Tableau associatif
// On remplace l'index numérique par une chaîne de caractères appelée clé
// Ainsi le tableau associatif, comme son nom l'indique devient un tableau d'associations de clé=>valeur
$fiche=array('nom' => 'Dupont', 'prenom' => 'Henry', 'email' => 'hdupont@exemple.org');
// Pour accéder à l'adresse email de monsieur dupont, il suffit d'appeler la variable ainsi
echo $fiche['email'];  // Affichera: hdupont@exemple.org
 

Définition de deux tableaux en Javascript:

 
// Tableau indicé
epices=['poivre', 'cumin', 'piment', 'coriandre', 'curry'];
// Equivalent de:
epices=[];
epices[0]='poivre';
epices[1]='cumin';
epices[2]='piment';
epices[3]='coriandre';
epices[4]='curry';
 
console.log('Aimez-vous le ' + epices[1] +'?'); // Affichera dans la console Javascript: Aimez-vous le cumin?
 
// Tableau associatif
// Même fonctionnement qu'en PHP, seule la syntaxe change
fiche={'nom': 'Dupont', 'prenom': 'Henry', 'email': 'hdupont@exemple.org'};
// Deux méthodes permettent d'accéder à l'adresse email de monsieur dupont
console.log(fiche['email']);  // Affiche hdupont@exemple.org dans la console javascript
// Ou
console.log(fiche.email);  // Affiche hdupont@exemple.org dans la console javascript
 

Définition de deux tableaux en Perl:

 
# Déclaration d'une variable tableau (indicé)
my @epices;
# Initialisation du contenu du tableau
@epices=('poivre', 'cumin', 'piment', 'coriandre', 'curry');
print "Encore un peu de ".$epice[0]."?"; # Affichera: Encore un peu de poivre?
# Equivalent de:
@epices=();
$epices[0]='poivre';
$epices[1]='cumin';
$epices[2]='piment';
$epices[3]='coriandre';
$epices[4]='curry';
print "Encore un peu de ".$epice[0]."?"; # Affichera: Encore un peu de poivre?
 
# En perl, on définit une variable tableau en faisant précéder son nom d'un @
# Mais pour accéder à ses valeurs, on utilise le symbole $ comme une variable classique
 
# Tableau associatif (aussi appelé table de hachage)
my %fiche=('nom' => 'Dupont', 'prenom' => 'Henry', 'email' => 'hdupont@exemple.org');
print $assoc{'email'}."\n"; # Affichera: hdupont@exemple.org
 

L'utilité de ce type de variable c'est de pouvoir traiter un grand volume de données avec un seul algorithme.

Par exemple, prenons l'algorithme suivant (en PHP):

 
// Liste d'abonnés
$liste=array(
  'jacques'  => 'jacques@truc.info',
  'Henry'    => 'henry@machin.fr',
  'Mike'    => 'mike@chose.com',
  'Pierre'  => 'pierre@bidule.net'
);
 
// On envoie le même mail à tous les abonnés
// A chaque passage dans cette boucle $clé contient le nom de l'abonné et $valeur l'adresse email de l'abonné
// Initialisation du sujet du mail
$sujet='Joyeuses fêtes';
foreach ($liste AS $cle=>$valeur) {
  // Initialisation du contenu du mail
  $message="Bonjour ".$cle."!".PHP_EOL.PHP_EOL.
    "Le blog ANDEE vous souhaite de joyeuses fêtes de fin d'année!".PHP_EOL;
  // Cette fonction n'existe pas, c'est une hypothèse pour l'exemple
  envoyerUnMail($sujet, $message, $valeur);
}
 

Dans l'exemple ci-dessous, nous avons envoyé un mail personnalisé à tous les abonnés avec un seul code. Grâce à l'utilisation d'un tableau associatif nous avons réussi à écrire un code simple qui traite une liste d'abonnés et envoie un mail à chacun d'eux.

Les tableaux sont la solution pour traiter des informations en masse avec un code simple et réexploitable.

Maintenant que nous avons parcouru la plupart des types de variables, nous pourrons étudier à partir du prochain article les structures de contrôle et commencer à faire des choses concrètes. D'ici là, je vous souhaite à tous de joyeuses fêtes de fin d'année ;-)