Combien de lignes de code doit une fonction/procédure/méthode? [dupliquer]
Doublon Possible:
quand une fonction est-elle trop longue?
J'ai récemment reçu la tâche peu enviable d'examiner le code pauvre écrit par un autre développeur et de documenter les mauvaises pratiques. (Tout cela dans le but de sortir de payer pour le travail du développeur plutôt que toute 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. Un couple de les problèmes auxquels j'ai pensé sont la maintenabilité et la lisibilité.
L'astuce est que je dois justifier à un profane pourquoi c'est une mauvaise pratique et si possible la sauvegarder 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 la taille maximale de la fonction?
6 réponses
Il ne s'agit pas de lignes de code. Comme le disent 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 chose. Cependant, de nombreuses lignes de code qu'il faut pour faire une chose, c'est le nombre de lignes qu'elle doit avoir. Si cette "une chose" peut être divisée en petites choses, chacune de celles-ci devrait avoir une méthode.
Bons indices votre méthode fait 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
Pour n'en nommer que quelques-uns. Bob Martin dit aussi de le garder 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 porter une attention plus particulière à cette méthode. Mais en fin de Compte, LoC est une mauvaise métrique pour à peu près n'importe quoi. Il est seulement utile indicateur qui peut potentiellement pointer vers le vrai problème.
La Vraie Réponse
Il n'y a pas de numéro spécifique.
Une Réponse Concrète
Si vous devez justifier avec un certain nombre d'avocats ou quelque chose, déterminez le nombre maximum de lignes qui correspondent à une fenêtre d'éditeur de développement typique dans votre boutique, et utilisez-le.
Pratique Générale
Vous ne devriez même pas vraiment le regarder de cette façon, mais il ne devrait y avoir rien de très complexe dans une fonction.
Chaque unité de travail devrait être déléguée à son propre unité testable descriptivement nommé méthode. faites ceci et toutes vos méthodes finissent minuscules et lisibles sans jamais compter les lignes......
Le plus grand délinquant que je vois est 3-4 + les conditions booléennes ont explosé au milieu d'une instruction if. L'emballage de tous que dans un booléen avec un bon nom, puis enveloppez toutes les pièces qui le composent, qui sont complexes dans leur propre.
Tout d'abord, notez que la restriction de longueur est entièrement séparée de la métrique habituelle, qui est "Est-ce que la fonction ne fait qu'une chose, et le fait 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 la longueur.
Rapportant spécifiquement à la longueur maximale, une citation de Code Complet, généralement considéré comme l'un des meilleurs livres sur le sujet des pratiques de codage:
De temps en temps, un complexe algorithme conduira à une routine plus longue, et dans ces circonstances, la routine devrait être autorisé à croître organiquement jusqu'à 100-200 lignes. (Une ligne est une ligne non commentée et non blanche du code source.) 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 de l'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 voulez écrire des routines de plus de 200 lignes, soyez prudent. Aucune des études qui ont signalé une diminution des coûts, une diminution des taux d'erreur, ou les deux avec des routines plus grandes distinguées entre des tailles supérieures à 200 lignes, et vous êtes lié à courir dans une limite supérieure de compréhensibilité que 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 L'apprentissage de Perl qu'ils recommandent de faire une procédure plus longue que vous ne pouvez adapter le tout à L'écran à la fois. Je pensais que c'était un bon point de comparaison. J'ai vu des fonctions plus longues qui étaient encore lisibles à cause 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 ajouter au point de Rex, il devrait également être aussi court que possible. Bob Martin dit 10 ou moins
Object Mentor - quelle devrait être la taille d'une fonction?