Question

  

Double possible:
   Quand une fonction est-elle trop longue?

On m'a récemment confié la tâche peu enviable d'examiner un code de mauvaise qualité écrit par un autre développeur et de documenter les mauvaises pratiques. (Tout cela dans le but d'éviter de payer pour le travail du développeur plutôt que pour toute raison altruiste, bien sûr!)

Le code révisé comporte plusieurs procédures qui consistent en plusieurs lignes de code - la plus longue compte près de 600 lignes. Voici quelques problèmes auxquels j'ai pensé: la facilité de maintenance et la lisibilité.

Le truc, c’est que j’ai besoin de justifier auprès d’un non-initié pourquoi c’est une mauvaise pratique et, si possible, de l’appuyer avec un livre de référence bien considéré et actuel. Les analogies sont bonnes aussi.

Des idées?

Dupliquer: Quand une fonction est-elle trop longue?
Dupliquer : Meilleure règle pour une taille de fonction maximale?

Était-ce utile?

La solution

Il ne s’agit pas de lignes de code. En tant que Steve Mcconnell et Bob Martin (deux très bonnes références sur les meilleures pratiques de codage), une méthode devrait faire une chose et une seule. Quel que soit le nombre de lignes de code nécessaires pour le faire, il faut savoir combien de lignes il devrait comporter. Si cela " une chose " peut être cassé en petites choses, chacune de celles-ci devrait avoir une méthode.

De bons indices pour que votre méthode fasse plus d’une chose:

  • Plus d'un niveau d'indentation dans une méthode (indique trop de branches logiques pour ne faire qu'une seule chose)
  • " sauts de paragraphe " - Les espaces entre les groupes logiques de code indiquent que la méthode fait plus d’une chose

Juste pour en nommer quelques-uns. Bob Martin dit également de ne pas dépasser les 10 ans. Personnellement, j'essaie généralement de tirer à 10, si le nombre commence à approcher les 20, c'est un signe mental pour accorder une plus grande attention à cette méthode. Mais en fin de compte, la LdC est une mauvaise mesure pour à peu près tout. C’est seulement un indicateur utile qui peut potentiellement indiquer le vrai problème.

Autres conseils

La vraie réponse

Il n'y a pas de numéro spécifique.

Une réponse concrète

Si vous devez justifier votre numéro auprès d'un avocat ou de quelque chose du genre, déterminez le nombre maximal de lignes pouvant correspondre à une fenêtre typique de l'éditeur de développement de votre boutique et utilisez-le.

Pratique générale

Vous ne devriez même pas vraiment voir les choses sous cet angle, mais rien ne devrait être très complexe dans une fonction.

Chaque unité de travail doit être déléguée à sa propre unité pouvant être testée de manière descriptive. Faites ceci et toutes vos méthodes finissent par devenir minuscules et lisibles sans jamais compter les lignes ......

Le plus grand délinquant que je voie est 3-4 + conditions booléennes ont explosé au milieu d'une déclaration if. Enveloppez tout cela dans un booléen avec un bon nom, puis enveloppez tous les éléments qui le composent sont complexes.

Tout d’abord, notez que la restriction de longueur est entièrement distincte de la métrique habituelle, à savoir "la fonction ne fait-elle qu’une chose et la fait-elle bien?" Si la réponse à cette question n’est pas affirmative, la fonction n’est probablement pas bonne de toute façon, quelle que soit sa longueur.

S'agissant spécifiquement de la longueur maximale, une citation de Code Complete, généralement considérée comme l'un des meilleurs ouvrages sur les pratiques de codage:

  

De temps en temps, un algorithme complexe entraînera une routine plus longue. Dans ces circonstances, la routine devrait pouvoir se développer de manière organique jusqu'à 100 à 200 lignes. (Une ligne est une ligne de code source non commentée et non vide.) Des décennies de preuves indiquent que des routines d'une telle longueur ne sont pas plus sujettes aux erreurs qu'une routine plus courte. Laissez des problèmes tels que la profondeur d'imbrication, le nombre de variables et d'autres considérations liées à la complexité, dicter la longueur de la routine au lieu d'imposer une restriction de longueur en soi.

     

Si vous souhaitez écrire des routines de plus de 200 lignes, faites attention. Aucune des études ayant fait état d’une réduction des coûts, d’une réduction du taux d’erreur ou des deux avec des routines plus volumineuses ne fait la distinction entre des tailles supérieures à 200 lignes et vous êtes forcé d’atteindre une limite supérieure de compréhensibilité lorsque vous transmettez 200 lignes de code.

Cela fait de nombreuses années que je lis ceci, mais je pense que c’est dans Learning Perl qu’ils recommandent de faire en sorte que la procédure ne soit pas plus longue que celle que vous pouvez afficher à la fois. Je pensais que c'était un bon critère. J'ai vu des fonctions plus longues qui étaient toujours lisibles à cause d'un code répétitif (accès à la base de données et attribution de valeurs de propriété, par exemple), mais il s'agit d'une exception plutôt que de la norme.

Pour ajouter quelque chose à Rex, il devrait également être aussi court que possible. Bob Martin dit 10 ou moins

Object Mentor - Quelle doit être la taille d'une fonction?

Aussi peu que possible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top