Désignation descriptive vs 80 lignes de caractères [fermé]

17

J'entends souvent ces deux précieuses pratiques de programmation: (1) les lignes de code doivent avoir 80 caractères ou moins et (2) utiliser des noms descriptifs pour les variables, les méthodes, les classes, etc. Je comprends cependant le raisonnement de ces deux conseils. , ils semblent souvent être des compromis les uns des autres. Si je garde mon code en dessous de 80 caractères / ligne, je finis par utiliser des noms moins descriptifs (en particulier en Python dans lequel chaque retrait compte pour 4 caractères) mais si j'utilise des noms plus descriptifs, je me retrouve avec des lignes de plus de 80 caractères.

Donc, ma question est de savoir lequel de ces deux conseils est le plus important à respecter si le choix doit être fait? Je me pose la question en tant que programmeur indépendant (amateur), mais plus important encore du point de vue d'un ingénieur logiciel travaillant pour une grande entreprise.

mjgpy3
la source
4
@BillyONeal Avec de grands écrans, 120 :)
BЈовић
4
Je pense que j'ai besoin d'au moins 130
9dan
8
Je préfère 80, car je peux ensuite facilement ouvrir 2 fichiers côte à côte sur mon ordinateur portable.
Honza Brabec
5
Les lignes de plus de 80 caractères ont tendance à devenir illisibles. 80 est donc une bonne limite. Les descriptions ne doivent pas être trop verbeuses. Et cela dépend de la portée: noms de variables courtes de petite portée, noms plus longs de grande portée. Et évitez absolument les variables de grande portée. Si vous y êtes, utilisez un langage fonctionnel et divisez votre code en fonctions plus petites quand il indente trop profondément -> très petite portée == noms de variables courts. Les noms de fonction sont similaires mais généralement un peu plus longs car leur portée est plus grande.
Peer Stritzinger
4
@ ott--: Avez-vous vu un éditeur, qui peut réellement casser une longue ligne, selon la syntaxe C ++, et présenter la suite en retrait d'un niveau de plus que le début? Sinon, une telle suggestion est inutile.
Jan Hudec

Réponses:

34

Gardez vos tirets peu nombreux, vos noms descriptifs et n'ayez pas peur de casser une ligne.

Gardez vos tirets peu.

Souvent, lorsque je me retrouve dans une lutte entre les retraits et la dénomination descriptive, je prends du recul et regarde mon niveau de retrait. Si vous indenter plus de 3 ou 4 niveaux (2 niveaux sont automatiques et inévitables dans de nombreux cas. Lire: définition de méthode de classe), vous souhaiterez peut-être restructurer votre code, en retirant les fonctionnalités d'une fonction ou d'une méthode.

Vos noms descriptifs

Vous devez toujours garder vos noms descriptifs. Les noms descriptifs créent un code auto-documenté. Vous pouvez essayer de raccourcir les noms dans certains cas, mais la lisibilité passe avant tout.

N'ayez pas peur de casser une ligne

La merde arrive. Si vous dépassez 80 caractères et que vous ne voyez pas de toute façon récupérer de l'espace sur la ligne, cassez-le. La plupart des langues ne se soucient pas des sauts de ligne, donc coupez la ligne en plusieurs. Ne vous contentez pas de choisir un emplacement aléatoire. Gardez les choses regroupées logiquement et indenter un autre niveau lorsque vous rompez la ligne.

Craige
la source
3
Il convient de noter que les noms descriptifs ne sont pas les mêmes que les noms longs. Éviter la répétition de choses qui peuvent être facilement vues du contexte et une poignée d' abréviations soigneusement choisies (seulement pour les concepts très courants) peut aller un long chemin vers des noms descriptifs courts.
Jan Hudec
18

Pourquoi pas les deux?

Tout d'abord, «descriptif» et «verbeux» ne sont pas les mêmes. Par exemple, si vous écrivez une boucle assez locale, iest un très bon nom de variable pour la variable de boucle; current_iteration_index, bien que sans doute plus descriptif et certainement plus verbeux, est bien pire et n'ajoute aucune information, car l'utilisation de icomme variable de boucle est à peu près universellement acceptée, et il n'y a pas d'autre sens à icela.

Les bons noms de variables sont descriptifs, en ce sens qu'un programmeur familiarisé avec l'idiome du langage et les conventions de la base de code peut facilement deviner quel est leur rôle, mais ils sont également suffisamment concis pour garder les choses compactes.

La limite de 80 caractères, bien qu'initialement une conséquence des limitations techniques des terminaux de texte des années 1970, est toujours appréciée par beaucoup aujourd'hui, et même s'il existe encore des raisons techniques (longueurs de ligne maximales dans certains protocoles réseau, notamment liés à la messagerie électronique), les raisons les plus impérieuses sont d'ordre psychologique et social. Il s'avère que les longueurs de ligne autour de la marque de 66 caractères rendent l'expérience de lecture la plus confortable pour la prose en langage naturel (la taille de la police ne fait pas de différence, et par conséquent, la taille de l'écran ou du papier non plus); Les limites de ligne de 80 caractères sont assez proches de cela, mais comme la majeure partie d'un morceau de code typique est généralement en retrait d'au moins un ou deux niveaux (ce qui signifie entre 4 et 16 caractères, selon les paramètres d'indentation),

Un autre effet de s'en tenir aux lignes de 80 caractères est que c'est un assez bon indicateur du moment où les choses sont trop compliquées. Les lignes aussi longues sont généralement causées par l'un des éléments suivants:

  • Fonctions avec une longue liste d'arguments; ce n'est pas une bonne chose à avoir, car ils entravent la lisibilité et peuvent facilement provoquer des bogues subtils, par exemple lorsque les gens échangent l'ordre des arguments d'une manière que le compilateur n'attrape pas.
  • Expressions complexes, souvent trouvées dans les conditions (par exemple if ((user.isLoggedIn && user.hasPermission(page.getRequiredPermission()) && !user.isBanned) || page.getRequiredPermission() == null)); cela aussi est généralement assez difficile à déchiffrer et le code doit être réécrit en quelque chose de plus structuré. Très probablement, l'expression fait trop et devrait être prise en compte dans une méthode ou une fonction.
  • Littéraux longs utilisés dans les appels de fonction ou les expressions, par exemple print(translate(LANG_EN, LANG_ES, "This is the home page. Feel welcome to click around and see what we have."));. Déplacez le littéral dans une variable ou une constante; il peut toujours dépasser la longueur de la ligne, mais si vous le faites régulièrement, le lecteur peut au moins ignorer en toute sécurité la partie invisible de la ligne, en supposant que seul le reste du littéral suit. Ou mieux encore, déplacez les littéraux hors du code et dans un magasin de données externe (fichier, base de données, etc.).
  • Instructions profondément imbriquées, par exemple six niveaux d' ifinstructions dans une méthode de classe (c'est 32 colonnes d'indentation pour les paramètres typiques). Encore une fois, l'imbrication profonde rend le code complexe et difficile à lire, et devrait être évitée comme la peste - en termes simples, l'imbrication profonde déborde la pile du cerveau humain pendant la lecture.

Tous ces éléments sont en fin de compte des symptômes de choses que vous ne préféreriez pas avoir dans votre base de code à long terme, et l'application de limites de 80 caractères est un moyen agréable et simple qui aide à réduire la complexité et la lisibilité. (Cela ne veut pas dire que vous ne pouvez pas écrire du code parfaitement illisible dans 80 colonnes: les divers concours de code quelque chose d'obscurci sont un contre-exemple clair).

tdammers
la source
1
+1: Excellente réponse, sauf que je ne suis pas d'accord pour éloigner les littéraux du code. Lorsque vous savez quel littéral vous recherchez, vous pouvez également le chercher dans les ressources ou le code, mais lorsque vous travaillez avec le code et que vous devez modifier le littéral, le rechercher dans un fichier séparé est une distraction. Notez également que toutes les langues ont un moyen de diviser les littéraux en plusieurs lignes, ce que je ferais dans ce cas.
Jan Hudec
Bien sûr, la phrase utilisée comme exemple de long littéral n'a pas sa place dans le code source. Des choses comme ça vont dans les modèles de page. Mais pour des choses comme les messages d'erreur, je préfère les conserver avec le code qui les émet.
Jan Hudec
@JanHudec: Bien sûr, déplacer les littéraux vers un fichier de données n'a pas toujours de sens. Je parle cependant de littéraux trop longs, et avec ceux-ci, j'ai rarement vu une occasion où les définir ailleurs aurait aggravé le code: la longueur du texte perturbe la lecture, tandis que le sens de celui-ci pourrait facilement être condensé en un nom constant ou variable, que vous définissez ensuite ailleurs. Les messages d'erreur sont un appel au jugement, je suppose.
tdammers
16

La dénomination descriptive est de loin plus importante. Dans la plupart des interfaces, nous pouvons faire défiler pour voir des lignes plus longues. Le système ne peut en aucun cas vous aider à traduire des variables et des fonctions mal nommées.

Matt S
la source
2
Cette. Arrêtez de casser les lignes sur les caractères X, laissez l'IDE gérer cela. Sinon, vous dérangez tous les autres utilisateurs (y compris votre futur!) Qui les écrans / IDE peuvent gérer 2 * X caractères avec un code qui ne tient plus sur une seule page.
Konerak
4
Cependant, la question portait implicitement sur les noms longs . Et je ne suis pas d'accord pour que les noms soient longs - la plupart du temps ils doivent être courts . Les noms descriptifs et longs peuvent rendre le code plus difficile à lire que les noms légèrement moins descriptifs mais plus courts! (Les lignes trop longues sont généralement difficiles à lire.)
Konrad Rudolph
4
Je ne suis pas d'accord. Si je ne peux pas voir le code à la fois, c'est difficile à lire, peu importe la description des noms.
Jan Hudec
4

80 caractères par ligne ne sont pas difficiles à respecter, même les noms sont longs car il existe de nombreuses façons de diviser une seule ligne de code long en plusieurs codes courts, par exemple, je peux diviser une déclaration de condition en C en plusieurs lignes pour en tenir moins de 40 personnages,

if ( a == b || c == d  || d == e
    || c == e || c == a || c == k
    || c == l)

vous pouvez également diviser une ligne de fonctions en plusieurs lignes.

Par conséquent, les deux règles de dénomination descriptive et les 80 lignes de caractères n'ont pas de contradiction, elles peuvent coexister pour améliorer la lisibilité.

néo
la source
2
80 caractères améliorent-ils vraiment la lisibilité? Quel écran ne peut pas facilement faire 120 de nos jours?
Billy ONeal
7
@BillyONeal, il est plus facile de numériser sur une largeur de 80 que sur une largeur de 120
ratchet freak
2
le journal se divise
neo
1
La rupture d'une condition logique améliore la lisibilité lorsque les sauts de ligne correspondent à la structure de la condition, mais pas nécessairement s'ils ne correspondent qu'à une limite arbitraire.
mikołak
1
@BillyONeal: la plupart des écrans peuvent en faire 120, mais presque aucun ne peut en faire 240. Ou ne comparez-vous jamais les différences?
Hubert Kario
0

La limite de 80 est quelque chose qui aurait dû être augmenté il y a longtemps. Notez que cette limite est utilisée depuis l'âge où la longueur de chaque identifiant était limitée à 8 caractères et une seule police sur l'écran / l'imprimante. Aucune possibilité de changer la taille de la police.

Dieu, nous avons maintenant des technologies d'écran et d'impression différentes. Nous avons des langages de programmation très différents. Il n'y a plus de raison d'utiliser 80 caractères. Augmentez-le à 120 caractères au moins.

Même alors, cela ne devrait pas être une limite stricte. Vous passez un personnage sur la ligne? Eh bien, rien ne se passe!

Éditer:

Réponses détaillées sur l'historique de la limite de 80 caractères

Personnages par ligne sur Wikipédia

Une étude à l'Université d'État de Wichita a révélé que le CPL n'avait que de petits effets sur la lisibilité, y compris les facteurs de vitesse et de compréhension. Lorsqu'on leur a demandé des préférences, cependant, 60% des répondants ont indiqué une préférence pour les lignes les plus courtes (35 CPL) ou les plus longues (95 CPL) utilisées dans l'étude. En même temps, 100% des répondants ont choisi l'une de ces quantités comme étant la moins souhaitable.

Sulthan
la source
4
Non, la limite ne devrait certainement pas être augmentée. Parce que cela n'a rien à voir avec la technologie d'écran et d'impression, ce n'est qu'avec le fait que 80 caractères par ligne sont au maximum que les yeux humains peuvent numériser confortablement (66 caractères sont considérés comme une largeur de ligne optimale, moins en impression multi-colonnes). Ce qui en passant signifie que la plupart des livres ont un peu moins de 80 colonnes pour les exemples de code.
Jan Hudec
3
@JanHudec Il a tout à voir avec la technologie d'écran / d'impression. Reportez-vous à programmers.stackexchange.com/questions/148677/… . La décision d'aller avec 80 personnages est purement historique, non basée sur des études. Pourriez-vous ajouter des liens vers des études pour confirmer votre opinion?
Sulthan
Une autre question a déjà obtenu ce lien UX dans ses commentaires; d'autres références là-bas. Bien que le nombre 80 lui-même soit une coïncidence historique, il est approximativement dérivé du nombre de frappes par ligne sur les machines à écrire, qui était approximativement dérivé de la largeur commune de l'impression sur une seule colonne et la moyenne de 66 lettres était une tradition établie depuis longtemps.
Jan Hudec