L’ “instruction” else if et l’indentation

Récemment, j’ai discuté avec un collègue du mot clef elseif présent en PHP, nécessaire au bon fonctionnement de sa syntaxe alternative. Celui-ci me disait qu’utiliser directement else if, permettait de simplifier l’analyse syntaxique étant donné que le compilateur n’avait plus à parser deux mots clefs à la suite dans un cas spécifique. Par avant, j’avais déjà rencontré sur des forums des débutants qui pensaient même que else if est un mot clef du langage (en C++), qui possède un espace.

Par conséquent, je fais ce petit rappel sur le fonctionnement de l’instruction if  (if statement). Il est probable que les notions abordées dans cet article soient déjà connues par la majorité des développeurs.

En C++, (et de façon similaire en Java, C# etc… qui suivent cette syntaxe héritée du C), l’instruction if  suit la syntaxe suivante (depuis C++17) :

Si on oublie les éléments optionnels (les attributs, le constexpr et l’init-statement), cela se resume ainsi :

Constatez qu’il n’est jamais fait mention d’un bloc else if, ni même d’une instruction else  (qui fait simplement partie de l’instruction if ) Si la condition est vraie, expression_vrai  est exécutée, sinon l' expression_faux  est exécutée.

Prenons un exemple tout simple :

L’intérêt d’avoir un if  dans le bloc else, c’est qu’on sait déjà que la condition précédente est fausse :

Le bloc if (ou if/else) est un if-statement, et constitue donc une unique expression. Par conséquent, les accolades ne sont pas nécessaires :

Dans un cas comme celui-ci, pour des langages tels que le C où l’indentation est laissée au choix du développeur, il est possible de rendre le code nettement plus facile à lire :

Ici, seule l’indentation a été changée, il s’agit toujours d’une imbrication de bloc if.

Dans un langage comme le Python ou encore PHP en syntaxe alternative, l’indentation n’est pas libre étant donné qu’elle définit la portée en se substituant aux accolades. L’équivalent en python par exemple serait :

C’est pourquoi, ces langages se voient obligés d’introduire un mot clef supplémentaire ( elseif  en PHP ou elif  en Python par exemple) pour compenser :

Ainsi ce termine cette réflexion au sujet des blocs if/else en programmation, à bientôt pour de nouveaux articles.

%d bloggers like this: