Cours 5.2. if imbriqués et indentation

Analysez le code suivant. Sachant que a>b, qu'affiche cette ligne ?

if ( a>b ) if ( b>a ) printf (“OK”); else printf (“KO”);

Cet exemple soulève deux questions :

Imbrication des if

Lorsque des if sont imbriqués, un else se rapporte toujours au dernier if rencontré auquel un else n’a pas encore été attribué.

Dans notre exemple initial, on s'aperçoit que le code affiche KO, donc le else se rapporte bien au dernier if, c'est-à-dire le test if ( b>a ).

Notez au passage que le compilateur nous alerte sur cette écriture ambigue :

main.c:7:40: warning: add explicit braces to avoid dangling else [-Wdangling-else]
  if ( a>b ) if ( b>a ) printf ("OK"); else printf ("KO");

Indentation

Si vous suivez ce cours depuis le début, vous avez sans doute remarqué que les codes sources sont toujours présentés de la même façon. Après les accolades ouvrantes, le code est décalé vers la droite :

if (var > 1) {
    printf ("Message");
    if (var > 2) {
        printf ("Un autre message");
        if (var > 3) {
            printf ("Encore un message");
            if (var > 4) {
                ...

Ce type de présentation du code s'appelle l'indentation. La règle est simple :

Si l'on omet l'accolade parce qu'il n'y a qu'une instruction dans le bloc, cette instruction est tout de même indentée. Reprenons l'exemple de l'introduction, cette disposition du code est tout de même plus claire :

if ( a>b ) {

    if ( b>a ) 
        printf ("OK"); 
    else 
        printf ("KO");
}

Si l'indentation ne change en rien l'exécution du code, elle est essentielle pour structurer le code ; en premier lieu pour vous, mais aussi pour les autres. Certains IDE proposent une indentation automatique. Sur Qt Creator, sélectionnez votre code (ctrl-a pour tout sélectionner), puis ctrl-i pour indenter la sélection.

Tabulation ou espaces ?

Pour indenter un code, vous pouvez utiliser la touche tabulation ou mettre des espaces, en général 2 ou 4. Quel que soit votre choix, ça ne changera en rien l'exécution du programme. Les fichiers sont moins volumineux avec les tabulations, mais avec les espaces l'affichage du code sera plus consistant d'un éditeur à l'autre.

Il est amusant de noter que ce débat anime la communauté des développeurs depuis des années. Ce débat est si passionné que les auteurs de la série Silicon Valley lui ont consacré une scène :

Personnellement, je suis un inconditionnel des tabulations.

Les tabulations, c'est mieux 😉.

Exercice 1

En utilisant des if imbriqués, écrire un programme qui affiche la mention d'une note saisie :

Entrez votre note : 13.8
Mention assez bien

Quiz

Qu'affiche le code suivant ?

if (1) if (0) printf ("Crac"); else printf ("Boum");
Vérifier Bravo ! Le else est associé au if (0). Essaie encore ...

Qu'affiche le code suivant ?

if (1) {
    if (0) 
        printf ("Crac"); 
    else 
        printf ("Boum");
printf ("Hue");
}
Vérifier Bravo ! Ce code est mal indenté, ça peut être trompeur. Essaie encore ...

Qu'affiche le code suivant ?

int score = 75;
if (score>=95) printf ("Grade A\n");
if (score>=85) printf ("Grade B\n");
if (score>=73) printf ("Grade C\n");
if (score>=64) printf ("Grade D\n");
Vérifier Bravo ! Il n'y a pas de else, donc plusieurs tests peuvent s'exécuter. Essaie encore ...

Pourquoi indenter son code est important ?

Vérifier Bravo ! Dans le monde professionel, indenter et commenter son code n'est pas optionnel. Essaie encore ...

Voir aussi


Dernière mise à jour : 26/09/2021