web-dev-qa-db-fra.com

Conventions de dénomination pour les méthodes Java qui renvoient un booléen (aucun point d'interrogation)

J'aime utiliser un point d'interrogation à la fin des noms de méthodes/fonctions dans d'autres langues. Java ne me le permet pas. Comme solution de contournement, comment puis-je nommer les méthodes de renvoi booléen en Java? À l'aide d'un is, has, should, can au début d'une méthode sonne bien dans certains cas. Y a-t-il une meilleure façon de nommer ces méthodes?

Par exemple createFreshSnapshot?

85
letronje

La convention est de poser une question dans le nom.

Voici quelques exemples qui peuvent être trouvés dans le JDK:

isEmpty()

hasChildren()

De cette façon, les noms sont lus comme s'ils auraient un point d'interrogation à la fin.

La collection est-elle vide?
Est-ce que cela Node) a des enfants?

Et alors, true signifie oui et false signifie non.

Ou, vous pouvez le lire comme une affirmation:

La collection est vide.
Le noeud a des enfants

Remarque:
Parfois, vous voudrez peut-être nommer une méthode comme createFreshSnapshot?. Sans le point d'interrogation, le nom implique que la méthode devrait créer un instantané, au lieu de vérifier si un est requis.

Dans ce cas, vous devriez repenser ce que vous demandez réellement. Quelque chose comme isSnapshotExpired est un bien meilleur nom, et transmet ce que la méthode vous dira quand elle sera appelée. Suivre un modèle comme celui-ci peut également vous aider à conserver davantage de fonctions sans effets secondaires.

Si vous faites un recherche Google pour isEmpty() dans l'API Java, vous obtenez beaucoup de résultats.

103
jjnguy

Si vous souhaitez que votre classe soit compatible avec spécification Java Beans , afin que les outils utilisant la réflexion (par exemple JavaBuilders , JGoodies Binding ) puissent reconnaître les valeurs booléennes. Getters, utilisez getXXXX() ou isXXXX() comme nom de méthode. De la spécification Java Beans:

8.3.2 Propriétés booléennes

De plus, pour les propriétés booléennes, nous permettons à une méthode getter de correspondre au modèle:

public boolean is < PropertyName > ();

Cette méthode “is < PropertyName >” peut être fournie à la place d'une méthode “get < PropertyName > ", ou il peut être fourni en plus d’une méthode" get < PropertyName > ". Dans les deux cas, si la méthode “is < PropertyName >” est présente pour une propriété booléenne, nous utiliserons le “is < PropertyName > ”méthode pour lire la valeur de la propriété. Un exemple de propriété booléenne pourrait être:

public boolean isMarsupial();
public void setMarsupial(boolean m);
28
Jason S

je veux poster ce lien car cela pourrait aider davantage les gens qui vérifient cette réponse et qui recherchent davantage Java

Directives de style de programmation Java

Le point 14 est particulièrement pertinent et suggère le préfixe is.

Le guide de style suggère ensuite:

Il existe quelques alternatives au préfixe is qui convient mieux dans certaines situations. Ce sont a, peut et devrait préfixes:

boolean hasLicense();
boolean canEvaluate();
boolean shouldAbort = false;

Si vous suivez les directives, je crois que la méthode appropriée serait nommée:

shouldCreateFreshSnapshot()
23
kommradHomer

Pour les méthodes qui peuvent échouer, c’est-à-dire que vous spécifiez boolean comme type de retour, j’utiliserais le préfixe try:

if (tryCreateFreshSnapshot())
{
  // ...
}

Pour tous les autres cas, utilisez des préfixes comme is..has..was..can..allows.. ..

12
codymanix

Standard est d'utiliser 'est' ou 'a' comme préfixe. Par exemple, isValid, hasChildren.

5
BillThor

is est celui que j'ai rencontré plus que tout autre. Tout ce qui est logique dans la situation actuelle reste la meilleure option.

2
Skilldrick