Langues avec C une syntaxe de type get else if
gratuit sans avoir à la mettre en œuvre à tous.
La raison en est que, dans la syntaxe des structures de contrôle fonctionnent sur la prochaine instruction, qui peut être une instruction composée entre accolades si nécessaire (par exemple, { x += 1; y += 1 }
).
Cela signifie qu'une fois que vous avez mis en œuvre if
et else
, else if
tombe juste en dehors de la grammaire de la langue bien sûr gratuitement, sans autre effort de mise en oeuvre. Pour comprendre pourquoi, jetez un oeil à ceci:
if (condition) {
if_body();
} else if (another_condition) {
else_if_body();
} else {
else_body();
}
Cela ressemble à un if
avec un else if
et else
- joint, chaque appliquée à une instruction composée. Mais en fait il ne l'est pas. C'est en fait deux distincts if
états, chacun avec exactement un else
des cas; le second, if
déclaration est à l'intérieur du corps de l' else
de la première if
déclaration.
else if { ... }
est vraiment analysée comme else
appliqué à l'instruction suivante, qui est une if
déclaration (appliqué à l'instruction composée { else_if_body(); }
. Ensuite, l'ultime else
se lie à celle qui la précède if
, ce qui est la seconde.
Voici la même chose écrite plus en ligne avec la façon dont il analysé1:
if (condition) {
if_body();
} else {
if (another_condition) {
else_if_body();
} else {
else_body();
}
}
Mais il s'avère que si la langue n'mettre directement en œuvre l' else if
comme un premier de la classe option pour if
des déclarations, il se comporte exactement de la même façon que la seconde indépendante if
déclaration à l'intérieur de l' else
de la première! Donc, il n'y a pas besoin de s'embêter à la mise en œuvre de else if
à toutes les langues; les responsables de l'implémentation obtenir de l' else if
gratuite avec ce style de syntaxe, une fois qu'ils ont mis en oeuvre if
et else
.
Python syntaxe ne permet pas de cette gratification.
Les programmeurs de C-syntaxe de style peut penser en termes de else if
même si la langue a seulement if
avec exactement zéro-ou-un else
, mais seulement parce qu'ils peuvent écrire du code comme mon premier exemple de mise en forme dans une manière qui est différente d'un lecteur humain qu'il n'en faut pour le compilateur.
Python, otoh, que, utilise l'indentation pour indiquer la structure du bloc, ce qui oblige la structure du bloc de regarder la même chose pour un lecteur humain comme il le fait à l'interprète2. Une fois que vous avez obtenu if
et else
en Python-la syntaxe de style, les programmeurs pourraient toujours écrire du code qui se comporte de manière identique à une autre personne-si, en mettant un second if
déclaration à l'intérieur de l' else
d'une première. Mais qui est à la recherche comme ceci:
if condition:
if_body()
else:
if another_condition:
else_if_body()
else:
else_body()
Cela semble laid, et c'est beaucoup plus complexe à penser en termes de qu'un d'autre-si la chaîne une fois que vous obtenez plus de 1 ou 2 autre-fi. Il est donc intéressant d'ajouter dans un langage explicite pour obtenir de la capacité à penser en termes de sinon-si. Même si techniquement il rend la langue plus complexe, cela fait vraiment penser en termes de la langue plus simple, il est donc bon de la complexité; avec un construits manuellement la chaîne de imbriquée if
s à l'intérieur d' else
s le lecteur a manuellement lire tout le code et vérifier que chaque else
à l'exception de la dernière contient exactement un if
déclaration et rien d'autre, dans le but de conclure que l'ensemble de la séquence est l'équivalent d'une chaîne linéaire de conditions vérifiées dans l'ordre, avec un peu de code à exécuter pour la première case qui réussit.
Alors. Nous avons vu que les langues avec C-syntaxe pourrait tout aussi bien aller avec else if
, parce qu'ils les obtenir gratuitement. C'est la raison pour laquelle ce qui existe. Langues avec Python syntaxe qui ont explicitement de faire quelque chose pour obtenir une construction qui peut être utilisé comme une autre, si. Pourquoi ont-ils choisi elif
? C'est arbitraire; vous auriez à demander réellement le peuple qui a pris la décision.
Cependant Python n'a pas inventé elif
, il a été autour dans d'autres langues long avant de Python existé. Donc, je suppose que quand ils ont dû mettre en œuvre explicite else-if ils ont simplement choisi un que les programmeurs ont déjà familier avec.
1 Techniquement, c'est comment les gens qui sont VRAIMENT sérieux au sujet de toujours en utilisant des accolades avec les structures de contrôle doivent écrire leur code. ;)
2 Vous pouvez certainement construire des contre-exemples, mais c'est l'idée générale de l'indentation base de la syntaxe.