Duplicata possible:
Quand une fonction est-elle trop longue?
On m'a récemment confié la tâche peu enviable d'examiner un mauvais code écrit par un autre développeur et de documenter les mauvaises pratiques. (Tout cela dans le but de ne pas payer le travail du développeur plutôt que pour une raison altruiste, bien sûr!)
Le code révisé a plusieurs procédures qui sont de nombreuses lignes de code - la plus longue est presque 600 lignes. J'ai pensé à quelques problèmes avec ceci: maintenabilité et lisibilité.
L'astuce est que je dois expliquer à un profane pourquoi c'est une mauvaise pratique et si possible la sauvegarder avec un livre de référence bien considéré et à jour. Les analogies sont bonnes aussi.
Des idées?
Dupliquer: Quand une fonction est-elle trop longue?
Dupliquer: Meilleure règle pour la taille maximale de la fonction?
Il ne s'agit pas de lignes de code. Comme Steve Mcconnell et Bob Martin disent (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, une chose est le nombre de lignes qu'il devrait avoir. Si cette "seule chose" peut être divisée en petites choses, chacune d'elles devrait avoir une méthode.
De bons indices que votre méthode fait plus d'une chose:
Juste pour en nommer quelques-uns. Bob Martin dit également de le maintenir autour de 10. Personnellement, j'essaie généralement de tirer pour 10. S'il commence à se rapprocher de 20, c'est un drapeau mental pour prêter une attention particulière à cette méthode. Mais finalement, LoC est une mauvaise métrique pour à peu près n'importe quoi. Ce n'est qu'un indicateur utile qui peut potentiellement pointer vers le vrai problème.
Il n'y a pas de numéro spécifique.
Si vous devez justifier avec un certain nombre d'avocats ou quelque chose, déterminez le nombre maximal de lignes qui correspondent à une fenêtre d'éditeur de développement typique dans votre boutique, et utilisez-le.
Vous ne devriez même pas vraiment voir les choses de cette façon, mais il ne devrait rien y avoir de très complexe dans une fonction.
Chaque unité de travail doit être déléguée à sa propre méthode testable nommée de manière descriptive. Faites ceci et toutes vos méthodes finissent par être minuscules et lisibles sans jamais compter les lignes ......
Le plus gros délinquant que je vois est 3-4 + les conditions booléennes ont explosé au milieu d'une instruction if. Envelopper tout cela dans un booléen avec un bon nom, puis envelopper toutes les pièces qui le composent qui sont complexes en elles-mêmes.
Tout d'abord, notez que la restriction de longueur est entièrement distincte de la métrique habituelle, qui est "la fonction ne fait-elle qu'une chose, et la fait-elle bien?" Si la réponse à cette question n'est pas oui, la fonction n'est probablement pas bonne de toute façon, quelle que soit sa longueur.
Concernant spécifiquement la longueur maximale, une citation de Code Complete, généralement considérée comme l'un des meilleurs livres sur le sujet des pratiques de codage:
De temps en temps, un algorithme complexe entraînera une routine plus longue, et dans ces circonstances, la routine devrait pouvoir croître organiquement jusqu'à 100-200 lignes. (Une ligne est une ligne de code source non commentaire et non vierge.) Des décennies de preuves indiquent que les routines d'une telle longueur ne sont pas plus sujettes aux erreurs que les routines plus courtes. Laissez des questions telles que la profondeur d'imbrication, le nombre de variables et d'autres considérations liées à la complexité dicter la longueur de la routine plutôt que d'imposer une restriction de longueur en soi.
Si vous souhaitez écrire des routines de plus de 200 lignes environ, faites attention. Aucune des études qui ont signalé une baisse des coûts, une baisse des taux d'erreur, ou les deux avec des routines plus grandes distinguées parmi les tailles supérieures à 200 lignes, et vous êtes obligé de rencontrer une limite supérieure de compréhensibilité lorsque vous passez 200 lignes de code.
Cela fait de nombreuses années que je n'ai pas lu ceci, mais je pense que c'est dans Learning Perl qu'ils recommandent de ne pas faire une procédure plus longtemps que vous ne pouvez adapter le tout à l'écran à la fois. Je pensais que c'était un bon critère. J'ai vu des fonctions plus longues qui étaient toujours lisibles en raison du code répétitif (par exemple, l'accès à la base de données et l'attribution de valeurs de propriété), mais ce sont l'exception plutôt que la norme.
Pour compléter le point de Rex, il devrait également être aussi court que possible. Bob Martin dit 10 ou moins
Le moins possible.