147 votes

Lisibilité des noms de méthodes booléennes

Question simple, du point de vue de la lisibilité, quel nom de méthode préférez-vous pour une méthode booléenne :

public boolean isUserExist(...)

ou :

public boolean doesUserExist(...)

ou :

public boolean userExists(...)

29 votes

Le premier ressemble à isBabbyFormed

0 votes

Cela dépend de la langue. Différents langages ont des conventions différentes ; Java et Objective C me viennent à l'esprit. C'est aussi à la limite du subjectif.

0 votes

Subjectif - assez juste

146voto

Martin Points 15155
public boolean userExists(...)

Ce serait ma préférée. Comme cela rend vos contrôles conditionnels beaucoup plus proches de l'anglais naturel :

if userExists ...

Mais je suppose qu'il n'y a pas de règle absolue - il faut juste être cohérent.

3 votes

"rend votre {appel de méthode} beaucoup plus proche de l'anglais naturel" semble être un excellent test pour la dénomination rationnelle à tous les niveaux. j'ai clarifié ma pensée sur le sujet - merci !

25 votes

D'autre part, isolément ou lorsqu'il ne suit pas immédiatement "if", "userExists()" sonne comme une déclaration de fait, plutôt que la question à laquelle il était destiné. Contrairement à "IsUserExisting()" ou "DoesUserExist()", qui suivent les règles d'ordre des mots du langage naturel anglais pour les questions simples.

7 votes

Mais pourquoi les méthodes retournant un bool seraient-elles utilisées en dehors d'un système de gestion de l'information ? if ? S'ils ont des effets secondaires, c'est encore pire. if IsUserExisting() y if DoesUserExist() a l'air horrible et devrait être évité.

49voto

Kai Points 4954

Je dirais userExists parce que 90 % du temps, mon code d'appel ressemblera à ceci :

if userExists(...) {
  ...
}

et il se lit très littéralement en anglais.

if isUserExist y if doesUserExist semblent redondants.

16voto

Konamiman Points 20578

L'objectif de lisibilité devrait toujours être d'écrire du code le plus proche possible du langage naturel. Donc dans ce cas, userExists semble être le meilleur choix. L'utilisation du préfixe "est" peut néanmoins être correcte dans d'autres situations, par exemple isProcessingComplete .

2 votes

Pour votre deuxième exemple, est-ce que ProcessingIsComplete plus proches des langues naturelles ? Par exemple : if (ProcessingIsComplete())

0 votes

Oui ! processingIsComplete est bon. Je préférerais, processingCompleted .

9voto

David Points 844

Je choisirais userExists() car 1) il est logique en langage naturel et 2) il respecte les conventions des API que j'ai vues.

Pour voir si cela a un sens en langage naturel, lisez-le à voix haute. "If user exists" ressemble plus à une phrase anglaise valide que "if is user exists" ou "if does user exist". "If the user exists" serait mieux, mais "the" est probablement superflu dans un nom de méthode.

Pour voir si un fichier existe dans Java SE 6, vous devez [utiliser File.exists()](http://docs.oracle.com/javase/6/docs/api/java/io/File.html#exists()) . On dirait que ce sera la même chose [dans la version 7](http://docs.oracle.com/javase/7/docs/api/java/io/File.html#exists()) . C# utilise la même convention comme le font Python y Ruby . J'espère que cette collection est suffisamment diversifiée pour que l'on puisse parler de réponse agnostique. En règle générale, j'opterais pour des méthodes de dénomination conformes à l'API de votre langue.

5voto

Lee Points 161

Il y a des éléments à prendre en compte qui, à mon avis, n'ont pas été pris en compte dans plusieurs autres réponses ici.

  1. Cela dépend s'il s'agit d'une méthode de classe C++ ou d'une fonction C. S'il s'agit d'une méthode, elle sera probablement appelée if (user.exists()) { ... } o if (user.isExisting()) { ... }
    pas if (user_exists(&user)) . C'est la raison pour laquelle les normes de codage stipulent que les méthodes bool doivent commencer par un verbe, car elles se lisent comme une phrase lorsque l'objet est devant elles.

  2. Malheureusement, beaucoup d'anciennes fonctions C renvoient 0 en cas de succès et une valeur différente de zéro en cas d'échec. Il peut donc être difficile de déterminer le style utilisé, à moins de suivre la règle selon laquelle toutes les fonctions bool commencent par des verbes ou comparent toujours à true, comme suit if (true == user_exists(&user))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X