N'utilisez jamais un mot long quand un minuscule fera l'affaire.
Je ne pense pas que votre thèse sur «la longueur du nom de la méthode est proportionnelle à la longueur de la méthode» tient vraiment la route.
Prenons l'exemple que vous donnez: "getNumberOfSkinCareEligibleItemsWithinTransaction". Cela me semble que cela ne fait qu'une chose: cela compte le nombre d'articles dans une transaction qui entrent dans une certaine catégorie. Bien sûr, je ne peux pas juger sans voir le code réel de la méthode, mais cela me semble être une bonne méthode.
D'un autre côté, j'ai vu beaucoup de méthodes avec des noms très courts et concis qui font beaucoup de travail, comme "processSale" ou le toujours populaire "doStuff".
Je pense qu'il serait difficile de donner une règle absolue sur la longueur du nom de la méthode, mais l'objectif devrait être: assez long pour transmettre ce que fait la fonction, assez court pour être lisible. Dans cet exemple, je pense que "getSkinCareCount" aurait probablement été suffisant. La question est de savoir ce que vous devez distinguer. Si vous avez une fonction qui compte les articles éligibles aux soins de la peau dans les transactions et une autre qui compte les articles éligibles aux soins de la peau dans autre chose, alors «withinTransactions» ajoute de la valeur. Mais si cela ne veut rien dire de parler de tels éléments en dehors d'une transaction, alors il est inutile d'encombrer le nom avec des informations aussi superflues.
Deuxièmement, je pense qu'il est extrêmement irréaliste de supposer qu'un nom de n'importe quelle longueur gérable vous dira exactement ce que fait la fonction dans tous les cas sauf les plus triviaux. Un objectif réaliste est de créer un nom qui donne un indice au lecteur et qui puisse être rappelé plus tard. Par exemple, si j'essaie de trouver le code qui calcule la quantité d'antimatière que nous devons consommer pour atteindre la vitesse de distorsion, si je regarde les noms des fonctions et vois "calibrateTransporter", "firePhasers" et "calcAntimatterBurn", il est assez clair que les deux premiers ne le sont pas, mais le troisième pourrait l'être. Si je vérifie et trouve que c'est bien celui que je recherche, il sera facile de s'en souvenir quand je reviendrai demain pour travailler encore sur ce problème. Il est assez bien.
Trois noms longs similaires sont plus déroutants que les noms courts. Si j'ai deux fonctions appelées "calcSalesmanPay" et "calcGeekPay", je peux faire une bonne estimation qui est laquelle en un coup d'œil. Mais s'ils sont appelés "CalculateMonthlyCheckAmountForSalesmanForExportToAccountingSystemAndReconciliation" et "CalculateMonthlyCheckAmountForProgrammersForExportToAccountingSystemAndReconciliation", je dois étudier les noms pour voir lequel est lequel. Les informations supplémentaires dans le nom sont probablement contre-productives dans de tels cas. Cela transforme une demi-seconde de réflexion en 30 secondes de réflexion.