Il semble y avoir un conflit sur l'opportunité d'utiliser des espaces ou des jetons comme des crochets pour indiquer la portée. J'ai vu de nombreux éloges de la solution de python au problème d'indentation incohérente, mais beaucoup ne sont pas d'accord:
Toute langue comportant des espaces comme jetons doit mourir.
posté plus tard sur la même réponse:
J'étais en quelque sorte anti-espaces blancs en tant que jetons, jusqu'à ce que je l'essaie. Cela a probablement aidé que ma disposition d'espace blanc personnelle corresponde à peu près à ce que tout le monde utilise en python-land. C'est peut-être que je suis un peu minimaliste, mais si vous allez quand même mettre en retrait, pourquoi s'embêter avec les {} s?
Je peux voir des arguments clairs pour chaque côté:
en utilisant des espaces:
- aide à réduire l'indentation incohérente dans le code
- efface l'écran en remplaçant les jetons visibles par des espaces pour servir le même objectif
en utilisant des jetons:
- beaucoup plus facile à couper et coller du code à différents niveaux (vous n'avez pas à corriger l'indentation)
- plus cohérent. Certains éditeurs de texte affichent les espaces différemment.
- plus populaire actuellement.
Y a-t-il des points que j'ai manqués? Lequel préfères-tu? Des paroles de sagesse après avoir longtemps travaillé avec l'un ou l'autre?
PS. Je déteste quand les langues n'utilisent pas le même jeton pour chaque structure de contrôle. VB est vraiment ennuyeux avec ses instructions End If
et End While
, la plupart des autres langues utilisent simplement {} pour tout. Mais c'est peut-être un sujet pour une question différente ...
la source
Réponses:
Je pense que beaucoup de programmeurs (moi y compris) ont tendance à "logiser" chaque décision. C'est bien, mais toutes les questions n'ont pas de réponse logique. Par exemple, je doute que les chefs posent des questions sur chefoverflow (si une telle chose existe) pour demander les avantages et les inconvénients de la tarte aux pommes par rapport à la tarte aux cerises. C'est une question que vous préférez.
Avec cela à l'esprit, je pense que la réponse la plus simple est de dire "Certaines personnes aiment les accolades, certaines personnes comme les espaces blancs" et en rester là.
la source
Au risque de ressembler à un fanboy absolu, je pense que tous ceux qui prétendent que les espaces blancs «aident à réduire l'indentation incohérente dans le code» n'ont jamais utilisé Visual Studio. Avec une seule commande (je pense que le raccourci par défaut est Ctrl + K, D), toute l'indentation est instantanément cohérente¹. De plus, lorsque vous collez du code, l'indentation est instantanément corrigée sans rien faire du tout, et il en va de même lors de l'écriture de nouveau code ou lors de l'encapsulation de quelque chose dans un
if
ou un autre bloc (le reformatage se produit au fur et à mesure de la}
frappe). En outre, appuyer sur Entrée après une instruction terminée place toujours le curseur au niveau d'indentation correct pour l'instruction suivante, même si l'instruction précédente a été indentée davantage en raison d'unif
ou similaire, ce qui rend très difficile de penser accidentellement qu’une déclaration est encore sous unif
moment où elle ne l’est pas.Le point que j'essaye de faire n'est pas que Visual Studio est génial. Le point que j'essaye de faire est que l'EDI peut automatiser la correction de l'indentation (et d'autres problèmes de formatage), mais seulement si la signification du programme ne dépend pas de son formatage. Cela donne au programmeur une plus grande opportunité de se concentrer sur la tâche de programmation réelle. Une syntaxe comme celle de Python est contre-productive: il n'est pas possible d'écrire un IDE qui puisse «corriger» l'indentation du code Python car l'indentation elle-même spécifie une partie de la sémantique.
¹ (Je sais qu'il existe un cas spécial que VS refuse de reformater, à savoir les littéraux de tableau qui s'étendent sur plusieurs lignes, mais ce n'est pas la question.)
la source
if
ligne n'importe où. Vous devez ensuite procéder à la correction manuelle de l'indentation.Personnellement, je trouve que j'ai besoin de la ligne vierge introduite en ayant un jeton sur sa propre ligne pour me faire comprendre que le code est dans une autre portée.
Je déteste quand en python les gens vont:
alors qu'en terre symbolique, je déteste quand les gens copient et collent et ne nettoient pas le retrait ,
ou n'utilisez pas de ligne distincte pour le jeton .
Je peux lire les trois, mais ils ne sont pas comme je m'y attendais et je dois faire des efforts pour les analyser et comme le dit Joel lorsque les choses ne fonctionnent pas comme vous vous y attendez, cela vous rend frustré.
la source
Pro: Il n'y a pas de guerres sacrées par indentation / accolade-placement dans le monde Python pour autant que je sache. Prendre cette décision au nom des développeurs a probablement sauvé une certaine douleur.
Con: les fonctions anonymes sont limitées à une ligne. Cela semble correct, mais je me retrouve souvent à écrire des lignes multiples
lambda
dans Scheme (principalement pour alimentermap
ouapply
exactement à un endroit, il ne serait donc pas logique de déclarer séparément).la source
lambda n: a = n \\na.sort() \\na[0:3]
cela ne retournerait pas une erreur de syntaxe? L'astuce `\` vous permet de répartir votre lambda sur une seule ligne sur plusieurs lignes, mais vous n'obtenez toujours pas plus d'une ligne réelle .{} ajoute de la redondance. Trop de redondance est mauvaise, trop peu est mauvaise. Et entrer manuellement est mauvais, surtout. s'il est difficile de l'utiliser.
Ainsi, en cas de mauvais / pas d'IDE, le style des espaces blancs pourrait être légèrement meilleur. Mais avec un IDE puissant, les accolades sont meilleures.
la source
Le problème que j'ai trouvé avec un langage d'espaces blancs était lié aux expressions conditionnelles multipages. L'ajout d'une ligne au milieu de la page deux et la suppression d'un espace au milieu de tous les dégâts peuvent modifier radicalement la logique de votre code. Et même si le code de quelqu'un est "correct", essayer de le lire fait un terrible jeu de devinettes. Pour quel "si" est-ce "autre"? Je peux compter les accolades beaucoup plus facilement que les caractères vides invisibles. Et les machines d'affichage sur ce site ne cessent de les briser dans un seul espace.
la source
Je ne pense pas que ce soit vraiment un contre .
Les pythoners critiquent souvent les programmeurs d'accolades comme s'ils violeraient facilement l'indentation parce qu'ils le peuvent.
En fait, j'ai toujours utilisé une indentation cohérente à 100% avant même de connaître Python et sa portée d'indentation.
Le fait est que les langages d'accolades pourraient également imposer une indentation correcte dans le compilateur et nous aurions le meilleur des deux mondes. Voir? non contre du tout.
Les pythoners diraient que les accolades sont inutiles lorsque l'indentation fait partie de la syntaxe, mais ce n'est pas le cas, les accolades améliorent la lisibilité. J'ai essayé de programmer Python et c'est un langage très intéressant pour moi, mais avez-vous essayé d'avoir des
if-elif
chaînes de plus de 2 ou 3 niveaux d'indentation? ils n'ont plus l'air si soignés.PS: J'ai écrit des accolades mais d'une manière plus générale, je veux dire des jetons de délimitation. L'accolade d'ouverture peut être considérée comme redondante, mais une langue pourrait aller comme ça (en fait, je suis sûr qu'il y a des langues exactement comme ça mais je ne les connais pas bien):
PS2: 2019, 4 ans après cette réponse. J'ai appris Python et je me suis totalement habitué à son indentation sémantique et je n'ai pas du tout de difficulté à lire. Surtout à l'aide d'IDE modernes qui dessinent des barres verticales pour aider à identifier les blocs de retrait.
la source