Les programmeurs Python trouvent-ils le problème des espaces blancs incommode? [fermé]

11

De nombreux programmeurs, lors de leur première rencontre avec Python, sont immédiatement découragés par l'importance des espaces blancs. J'ai entendu diverses raisons pour lesquelles cela n'est pas pratique, mais je n'ai jamais entendu de plainte d'un programmeur Python.

Bien sûr, je n'ai pas rencontré beaucoup de programmeurs Python, car j'ai passé ma carrière dans le monde Java.

Ma question s'adresse donc à ceux d'entre vous qui ont participé à un grand projet Python (plus de 3 mois, Python étant le langage principal utilisé): avez-vous trouvé le problème des espaces blancs incommode et continuellement ennuyeux? Ou était-ce un non-problème une fois que vous êtes entré dans le courant?

Je ne pose pas la question parce que je suis pour ou contre Python, ou pour ou contre son utilisation des espaces blancs. Il se trouve que j'aime Python, mais je ne l'ai jamais utilisé pour quelque chose de grand.

Veuillez ne pas fournir de spéculations si vous n'êtes pas expérimenté en Python.

Eric Wilson
la source
2
Utiliseraient-ils la langue s'ils le faisaient? Je ne le ferais pas. Les exigences de syntaxe ennuyeuses / distrayantes sont l'une des choses qui pourraient me faire choisir une langue différente pour un projet (en supposant, bien sûr, que je peux choisir).
depuis quand l'espace blanc est-il un problème? :-)
Kugel
22
Nous trouvons gênant que tout le monde continue d'en parler. On n'y pense jamais.
Winston Ewert
La question des espaces blancs n'est pas différente d'il y a des années - OCCAM2 avait un espace blanc important. Ce n'était pas grave.
rapid_now
4
La seule fois où je l'ai trouvé ennuyeux, c'est quand copier-coller du code en ligne qui a été écrit en utilisant des espaces au lieu d'onglets (ou vice versa), provoquant des erreurs de syntaxe littéralement invisibles
Cameron

Réponses:

14

Il n'y a qu'un seul cas dans lequel je trouve l'espace blanc ennuyeux, et c'est lors de la modification du code existant de sorte qu'un bloc de code doit devenir plus ou moins en retrait qu'auparavant (par exemple, ajouter ou supprimer un if:avant le code). Lorsque vous écrivez dans un langage comme C, vous ajoutez simplement le ifet une paire d'accolades et (dans Emacs, ou j'imagine un bon éditeur) appuyez sur Tab pour laisser l'éditeur corriger automatiquement l'indentation. En Python, vous devez le faire vous-même. Bien sûr, il existe des raccourcis éditeur pour le faire vous-même, donc ce n'est pas si mal, mais la perte de redondance impose une légère charge supplémentaire au programmeur.

Dans l'ensemble, c'est une victoire, ne serait-ce que pour empêcher la moitié de mon écran d'être remplie de lignes comme celle-ci:

         }
      }
   }
}
dfan
la source
1
Dans tout éditeur raisonnable parlant Python, il existe un moyen très simple de réindenter un bloc de code. Dans Wing IDE, je sélectionne simplement le bloc et je tape Tab (ou Shift-Tab pour diminuer le niveau de retrait).
Adam Crossland, le
1
Oui, dans Emacs je sélectionne le bloc et je tape C-c >ou C-c <. Mais vous devez toujours le faire vous-même. En d'autres termes, étant donné que les espaces et la logique du code ne sont pas redondants, vous ne pouvez pas simplement sélectionner un bloc géant et appeler M-x indent-region(ou quelle que soit la version de votre éditeur) pour le mettre en retrait "correctement".
dfan
6
@Adam, un bon éditeur facilite le changement de niveau d'indentation. Mais dans un langage d'accolades, vous pouvez coller du nouveau code et appuyer sur votre touche préférée pour réindenter le fichier. Tada! L'indentation est correcte. En python, vous devez coller, sélectionner, mettre en retrait / déduire. Ce n'est pas beaucoup mais il y a une petite victoire ici pour les accolades.
Winston Ewert
@Winston - doit être votre éditeur. Si le code que vous collez est en lui-même correctement indentet, alors s'il sort de quelques niveaux trop à droite / gauche, il suffit de taper (SHIFT +) Tab pour l'aligner en conséquence - ce n'est pas vraiment une différence de frapper la touche pour réindenter le fichier. En plus - tu ne dois pas copier / coller le code :)
Ingo
1
@ Winston: même les blocs de retrait Notepad ++ lors de l'utilisation de Tab et Shift-Tab, je n'ai pas encore trouvé le raccourci vim, mais je ne l'utilise pas assez je suppose: p
Matthieu M.
50

J'adore les espaces importants de Python. Pour moi, c'est l'exemple parfait de DRY au niveau syntaxique. La manière lisible par l'homme d'indiquer où commence et se termine un bloc de code est l'indentation. Si vous voulez que votre code soit lisible, vous devez le mettre en retrait quelle que soit la langue. Il est stupide de faire en sorte que le programmeur spécifie ces informations deux fois, une fois pour le compilateur / interprète et une fois pour les humains. En outre, l'indentation dans les langages de type C est similaire à un commentaire: il est destiné à améliorer la compréhensibilité, mais sa signification n'est pas appliquée par le compilateur / interprète et il peut se désynchroniser avec la signification réelle (où se trouvent les accolades) très facilement, obscurcissant plutôt que clarifiant.

dsimcha
la source
8
+1 pour Don't Repeat Yourself. La bonne pratique consiste à indenter le code pour refléter la structure du bloc de toute façon, alors pourquoi avoir aussi des marqueurs de début / fin?
Steve314
12

Un espace blanc important me convient en fait . Cela me fait moins taper. Il formate le code de manière claire et sans ambiguïté. Pour cette raison, il rend le code plus lisible.

(J'aime aussi les espaces importants à Haskell, pour les mêmes raisons.)

9000
la source
1
J'aurais aussi partagé mon expérience positive avec les espaces blancs Haskell, mais FarmBoy a insisté sur le fait qu'il fallait avoir 3 mois d'expérience avec Python, tout le reste n'était que de la spéculation. :-)
Ingo
1
Mon expérience avec Python nous depuis 1998, donc ma réponse se qualifie probablement :) (Dommage que mon expérience avec Haskell soit beaucoup plus courte.)
9000
@ 9000 Même si Haskell est venu avant Python! : D
pradyunsg
8

Quand j'ai utilisé python pour la première fois, le blanc était nouveau et donc une restriction ennuyeuse.

Maintenant, je ne le remarque même pas. J'utilise python depuis 11 mois.

Matt Ellen
la source
5

Tout d'abord - mes langages de type pain et beurre sont Python, SQL et Java. J'adore les espaces blancs de Python - c'est moins de syntaxe et de frappe, et cela oblige les gens à écrire du code lisible et bien formaté. OTOH, je déteste la verbosité de Java - à tel point que j'utilise en fait Python pour générer tout le passe-partout que j'ai à écrire en Java, ce qui impressionne tous mes collègues Java qui sont étonnés de ma productivité.

La seule grande mise en garde, cependant, est lorsque vous copiez / collez du code à partir du Web - cela provoque souvent des espaces et des tabulations mixtes qui nécessitent une étape supplémentaire pour nettoyer, et je n'attrape généralement qu'après une exception d'exécution.

Greg
la source
Dire à votre éditeur de mettre en évidence les onglets de coloration syntaxique car les erreurs peuvent beaucoup aider - pour vim j'utilise highlight link RedundantSpaces Error | au BufEnter,BufRead * match RedundantSpaces "\t" | au BufEnter,BufRead * match RedundantSpaces "[[:space:]]\+$"dans mon vimrc
Daenyth
4

Si un programmeur est ennuyé par l'importance des espaces blancs, il ne deviendra probablement pas un programmeur python.

BenjaminB
la source
1
J'ai entendu pas mal de gens prêcher Python qui disent avoir eu leurs problèmes avec The Whitespace Thing (tm) mais qui en sont venus à l'aimer après un certain temps. D'après mon observation, il semble que plus de gens se joignent à une discussion sur ce sujet, la propension de l'un d'entre eux à raconter une telle histoire s'en approche. (Edit: Immédiatement prouvé par la deuxième réponse ...)
@delnan, je peux y souscrire.
Ingo
3

Je parierais que vous trouveriez un chevauchement considérable entre les personnes qui ont un problème avec des espaces blancs importants et celles qui n'ont pas d'expérience avec un bon éditeur de texte de programmeur, comme Emacs, qui gère la plupart des indentations sans leur implication.

En tout cas, une fois que vous avez internalisé Python, ce n'est plus un problème; en fait, sa concision et le petit espace qu'il occupe sur l'écran deviennent un grand avantage pour la lisibilité. Depuis que j'utilise principalement Python, je trouve des langages où il y a plus de redondance (par exemple Java et C #) difficiles à me discipliner pour écrire. Mettre des accolades autour du code dont l'indentation rend déjà sa structure claire sur mes nerfs.

JasonFruit
la source
3

Pour le codage réel, ce n'est pas du tout gênant, mais réellement bénéfique (voir la réponse de dsimcha).

Cela peut être ennuyeux lorsqu'il s'agit de technologies de communication qui ne respectent pas les espaces blancs de premier plan (comme de nombreux forums Web non orientés programmation et également lors de l'intégration de code Python dans un langage différent, comme les langages de modélisation HTML), même si je vois cela comme plus d'un défaut dans les outils qui suppriment les espaces blancs principaux qu'un défaut en Python, il est vrai que les langages redondants qui expriment deux fois la structure de code sont mieux équipés pour gérer de tels environnements destructeurs (puisque vous pouvez coller le code dans un éditeur et auto- réindentation basée sur les marqueurs structurels explicites, ou tout simplement ne se soucie pas si le code est uniquement exécuté plutôt que lu par les humains).

ncoghlan
la source
2

Je ne trouve pas les espaces ennuyeux. Je trouve le manque ou le retrait incohérent très ennuyeux dans d'autres langues. Je comprends que ce problème est l'un des problèmes que le style est censé résoudre.

Python n'est pas l'un de mes principaux langages.

Je trouve la gestion des tabulations et des espaces dans l'indentation ennuyeuse à l'occasion. Cela peut entraîner des problèmes lors du passage des éditeurs d'une édition à une autre, ou lors de l'édition de code écrit par quelqu'un d'autre. C'est généralement trivial à résoudre.

BillThor
la source
1
mélanger les onglets et l'espace dans l'indentation en python est le chemin le plus court vers l'enfer: p
Matthieu M.
@Mattieu: Certainement, c'est mon ennui.
BillThor
1

Je viens d'un milieu C # / Javascript / XBase sans ordre particulier, et dans mes essais avec Python, ce n'est pas du tout une considération pour moi. C'est comme des accolades dans d'autres langues - c'est comme ça que ça marche, mettre les choses comme le disent les règles, et se sécher les yeux est mon attitude.

Alan B
la source