L'utilisation de variables à une lettre est-elle encouragée en Java? Dans les extraits de code ou les didacticiels, vous les voyez souvent. Je ne peux pas imaginer que leur utilisation soit encouragée car cela rend le code relativement plus difficile à lire et je ne les vois jamais être utilisés dans d'autres langages de programmation!
java
coding-standards
variables
William Edwards
la source
la source
Réponses:
Nommer correctement les choses est difficile. Très dur. Si vous le regardez dans l'autre sens, vous pouvez également considérer que cela signifie que les choses correctement nommées sont importantes. (Sinon, pourquoi auriez-vous passé l'effort à le nommer?)
Mais, parfois, les noms des choses ne sont tout simplement pas importants. C'est pourquoi nous avons des choses comme des fonctions anonymes ("lambdas"), par exemple: parce que parfois cela ne vaut pas la peine de nommer des choses.
Il existe de nombreux exemples où des noms de variables à lettre unique (ou très courts) sont appropriés:
i
,j
,k
,l
Pour les indices de bouclek
etv
pour la clé et la valeur dans une carten
pour un nombre (par exemple enMath.abs(n)
)a
,b
,c
Des objets quelconques (par exemple,max(a, b)
)e
pour l'élément dans unefor each
boucle génériquef
pour la fonction dans une fonction d'ordre supérieurp
pour la fonction de prédicat dans un filtreT
,T1
,T2
, ... pour les variables de typeE
pour les variables de type représentant le type d'élément d'une collectionR
pour une variable de type représentant le type de résultat d'une fonctionex
pour l'exception dans unecatch
clauseop
pour l'opération dans une carte ou un plis
pour indiquer le pluriel, c'est-à-dire une collection (par exemplens
pour une collection de nombres,xs
etys
pour deux collections arbitraires d'objets génériques)Ils sont très courants dans à peu près tous les langages que je connais (et probablement aussi dans ceux que je ne connais pas). Haskell, F #, ML, Ruby, Python, Perl, PHP, C #, Java, Scala, Groovy, Boo, Nemerle, D, Go, C ++, C, vous l'appelez.
la source
k
etl
des indices de boucle, qui est trop loin (vous ne devriez pas avoir que beaucoup de boucles imbriquées pour commencer, extrait les aux fonctions) . Personnellement, je n'utilise jamais plus d'une variable à 1 lettre par fonction, mais je tire pour 0.l
oulen
est utilisé pour une longueur etarr
pour un tableau (par exemple:)for(var i=0; l=arr.length; i<l; i++)
. En outre,fn
peut être utilisé à la place def
, lorsque vous faites référence à une fonction.Si votre boucle ne fait rien d'autre qu'utiliser une variable pour compter
alors oui, c'est le meilleur nom que vous pourriez utiliser. Tout ce qui est plus long ne peut pas rendre la sémantique plus évidente, mais prend beaucoup plus de temps à lire.
Si la variable est utilisée à l' intérieur l' la boucle, un nom significatif peut être utile.
Si votre variable est utilisée à l'échelle de la méthode, son nom doit être plus long; s'il est utilisé à l'échelle de la classe, son nom devrait être totalement explicite, sinon cela réduira presque certainement la clarté de votre code.
En bref, plus la portée de la variable est grande, plus son nom doit être long.
la source
index
lors de l'itération sur un tableau, par exemple.i
est un mot propre avec un sens défini avec précision, à savoir "index dont vous n'avez pas trop à vous soucier". Mais je suppose que c'est une question de familiarité. Si vous lisez beaucoup de Haskell, vous vous habituerez à lirem
comme monade ,f
comme foncteur ,x
comme un objet ,xs
comme une liste dex
s et ainsi de suite.i
c'est "le meilleur nom que vous pourriez utiliser" pour une boucle qui utilise une variable uniquement pour le comptage. Dans ce cas, je préférerais voircount
utilisé comme nom de variable: immédiatement compréhensible.for (int count = 0; count < 10; count++)
ouwhile (count--)
.En lisant le code dans la réponse de Kilian, je ne pense pas "qu'il y ait une boucle, et il y a une variable, et elle a le type int, et elle a un nom, et le nom est i, et il est initialisé à 0,. .. ". Je pense juste "boucle ..." où les trois points représentent des détails sans importance auxquels je ne pense même pas. Dans l'esprit de mon programmeur, cette variable n'existe pas vraiment, c'est juste un artefact que je dois taper, comme le for (;;) {} qui en fait une boucle.
Puisque cette variable n'existe même pas dans mon esprit, pourquoi lui donnerais-je un nom, au-delà de ce qui est absolument nécessaire?
la source
i
, mais_
pour la variable manifestement dénuée de sens. Mais tout le monde ne connaît pas Prolog, et cela créerait probablement plus d'attention qu'il n'enlève.for (...)
tête._
s'agit d'un identifiant légal comme les autres, il y a eu un changement récent selon lequel les variables locales inutilisées nommées_
(ou commençant par_
) ne génèrent pas un avertissement "variable locale inutilisée", même si Ruby les avertit normalement.Si vous faites référence aux lettres i, j, k comme des indices dans une boucle, c'est une pratique courante en Java et dans d'autres langages de programmation. Bien qu'il soit préférable d'utiliser un pour chaque boucle de style, comme
au lieu de
En Java, ce style de boucle n'a été introduit que récemment. C'est peut-être pourquoi vous le remarquez plus pour Java, car le bouclage sur les index était le moyen le plus courant de boucler sur un tableau ou une liste.
Il existe quelques autres cas où des lettres simples peuvent être appropriées, comme lors de l'implémentation d'une fonction mathématique où des lettres simples telles que n, x ou y peuvent déjà être courantes. Mais en général, non, nommez vos variables quelque chose de significatif.
la source