it-swarm-fr.com

Quels sont les avantages et les inconvénients d'une langue utilisant WhitSpace vs. s {} pour indiquer la portée?

Il semble y avoir un conflit sur la question de savoir s'il est préférable d'utiliser des espaces ou des jetons tels que des crochets pour indiquer une portée. J'ai vu de nombreuses éloges la solution de Python au problème d'indentation incompatible, mais beaucoup de désaccord :

Toute langue qui a blouse à mesure que les jetons doivent mourir.

posté plus tard sur la même réponse:

J'étais triée d'anti-WhitSpace-as-jetons, jusqu'à ce que je l'ai essayé. Il a probablement aidé que ma disposition personnelle de l'espace blanc correspond à peu près à ce que tout le monde à Python-terre utilise. C'est peut-être que je suis un peu minimaliste, mais si vous allez vous déranger de toute façon, pourquoi vous embêter avec le {} s?

Je peux voir des arguments clairs pour chaque côté:

utilisation de WhitSpace:

  • aide à réduire l'indentation incompatible dans le code
  • efface l'écran en remplacez les jetons visibles avec des espaces blancheurs pour servir le même but

utilisation de jetons:

  • beaucoup plus facile de couper et de coller du code à différents niveaux (vous n'avez pas à réparer l'indentation)
  • plus cohérent. Certains éditeurs de texte affichent le blancheur différemment.
  • plus populaire actuellement.

Y a-t-il des points que j'ai manqués? Lequel préfères-tu? Des mots de sagesse après avoir travaillé avec l'un ou l'autre depuis longtemps?


Ps. Je déteste-le quand les langues n'utilisent pas le même jeton pour chaque structure de contrôle. VB= est vraiment ennuyeux avec son End If et End While déclarations, la plupart des autres langues utilisent simplement {}'s pour tout. Mais peut-être que c'est un sujet pour une question différente ...

18
Gordon Gustafson

Je pense que beaucoup de programmeurs américains (moi-même inclus) ont tendance à "logiquer" chaque décision. C'est bien, mais toutes les questions n'ont pas une réponse logique. Par exemple, je doute que les chefs post des questions sur Chefoverflow (si une telle chose existe) demandant les avantages et les inconvénients de Apple tarte vs cerise tarte. C'est une question dont vous préférez.

Avec cela à l'esprit, je pense que la réponse la plus simple est de dire "certaines personnes comme des accolades, des personnes comme des espaces" et laissent cela à cela.

15
Jason Baker

Au risque de sonner comme un fanboy total, je pense que tous ceux qui prétend que WhitSpace "aide à réduire l'indentation incohérente dans le code" n'a 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¹. En outre, lorsque le code de collage, l'indentation est corrigée instantanément sans avoir à faire quoi que ce soit du tout, et il en va de même pour écrire un nouveau code ou lorsque vous enveloppez quelque chose dans un if ou un autre bloc (Reformat se produit comme la } est typée). En outre, en appuyant sur Entrée après une instruction terminée place toujours le curseur au niveau d'indentation correct pour la déclaration suivante, même si l'instruction précédente était en retrait supplémentaire à cause d'un if ou similaire, rendu très difficile de penser accidentellement que Une déclaration est toujours sous un if quand ce n'est pas le cas.

Le point que j'essaie de faire est non que Visual Studio est génial. Le point que j'essaie de faire est que le IDE= peut automatiser la fixation d'indentation (et d'autres problèmes de formatage), mais uniquement si la signification du programme ne dépend pas de sa mise en forme. Cela donne au programmeur une plus grande occasion de se concentrer sur la tâche de programmation effective. Une syntaxe comme Python est contre-productive: il n'est pas possible d'écrire un IDE qui peut "corriger "L'indentation de Python code parce que l'indentation elle-même spécifie une partie de la sémantique.


¹  (Je sais qu'il y a un cas particulier que vs refuse de reformater, nommément les littéraux de groupe qui parcourent plusieurs lignes, mais c'est à côté du point.)

11
Timwi

Personnellement, je trouve que j'ai besoin de la ligne blanche introduite en ayant un jeton sur sa propre ligne de faire comprendre que le code est dans une autre portée.

Je déteste ça quand in python personnes vont:

if something
    do something
    do somethingelse

    cleanup
else
    do the other thing

alors que dans la terre de jeton, je déteste quand les gens copient et collectent et ne nettoient pas l'indentation ,

if something
{
I have been too lazy
      {
            to clean up
            }
what I pasted
}

ou n'utilisez pas une ligne séparée pour le jeton .

if something {
    I find this confusing
}
else {
especially when combined with the previous 
do something
}

Je peux lire les trois, mais ils ne sont pas comme je m'attends et je dois dépenser des efforts pour les analyser et comme Joel dit Quand les choses ne fonctionnent pas comme si vous vous attendez à ce que cela vous attend.

3

Pro: Il n'y a pas d'indentation/garde-corps-brace-placement des guerres saintes dans le Python 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. Sonne bien, mais je me trouve souvent en train de écrire plusieurs lignes lambdas dans le schéma (principalement pour se nourrir de map ou apply dans un endroit exactement, il ne ferait donc pas de faire sens de déclarer séparément).

3
Inaimathi

{} ajoute la redondance. Trop de redondance est mauvaise, trop peu est mauvaise. Et manuellement entrant est mauvais, esp. Si c'est difficile à utiliser.

Donc, en temps de mauvais/aucun IDE, le style des espaces pourrait être légèrement meilleur. Mais avec un puissant IDE, les accolades sont meilleures.

3
user470365

Je ne pense pas que ce soit vraiment A Versus.
[.____] Les Pythoneers critiquent souvent les programmeurs d'accolades comme s'ils violent 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 environ Python et son cadre d'indentation.

Le fait est que les langues d'accolades pourraient également imposer une indentation correcte dans le compilateur et nous aurions le meilleur des deux mondes. Voir? Non contre du tout.

Pythoneers affirmerait que les accolades sont inutiles lorsque l'indentation fait partie de la syntaxe, mais elles ne le sont pas, les accolades améliorent la lisibilité. J'ai essayé la programmation Python et c'est une langue très intéressante pour moi, mais avez-vous essayé d'avoir if-Elif Chaînes de plus de 2 ou 3 niveaux d'indentation? Ils ne semblent plus si soignés.

PS: J'ai écrit bretelles mais de manière plus générale, je veux dire des jetons de délimiteur. L'attelle d'ouverture peut être considérée comme redondante, mais une langue pourrait aller comme ceci (en fait, je suis sûr qu'il y a des langues exactement comme ça, mais je ne les connais pas bien):

if condition:
    statement
    other_statement()
end

PS2: 2019, 4 ans après cette réponse. J'ai appris Python et s'est totalement habitué à son empreinte sémantique et ne trouve pas difficile de lire du tout. Surtout avec l'aide d'IDes modernes qui dessinent des barres verticales pour aider à identifier des blocs d'indentement.

2
Petruza

Le problème que j'ai trouvé avec une langue blanche était avec des expressions conditionnelles multi-pages. Ajout d'une ligne au milieu de la page 2 et descendre par un espace au milieu de tous les mess, peut altérer considérablement la logique de votre code. Et même si le code de quelqu'un est "correct", essayant de lire, il fait un jeu de devinettes terrible. Quel "si" est-ce "sinon"? Je peux compter beaucoup plus facilement que je ne peux pas compter des caractères vides invisibles. Et la machine d'affichage sur ce site continue de les casser dans un seul espace.

IMHO "{{{{{" is more reliable than "     ".
2
Andy Canfield