Java boolean getters “is” vs “are”

Je sais que la convention en Java pour les booléens est d’inclure le préfixe “is”.

isEnabled isStoreOpen 

Mais si le sujet est pluriel? C’est-à-dire si, au lieu de vouloir savoir si un magasin est ouvert, je voulais savoir si tous les magasins sont ouverts?

isStoresOpen() n’a pas de sens en anglais.

Je suis tenté d’écrire des getters comme:

 areStoresOpen areDogsCute areCatsFuzzy 

Et je pense que cela aurait du sens, mais d’autres m’ont dit que je devais juste le sucer et abandonner l’accord de verbe sujet et utiliser isStoresOpen , isDogsCute , isCatsFuzzy .

Quoi qu’il en soit, que dois-je faire pour les booléens qui opèrent sur un sujet pluriel?

Je ne me souviens plus de quel livre il s’agissait, mais l’essentiel est que le code sera lu beaucoup plus souvent qu’il n’est écrit. Ecrivez pour la lisibilité.

Que diriez-vous d’avoir un anglais et un standard Java décents:

isEveryStoreOpen() ou isEachCatCute()

En cas de doute sur le mot juste, j’aime toujours aborder le thésaurus.

La convention est de préfixer la méthode getter avec “is” et non la variable elle-même.

par exemple

 private boolean enabled; public boolean isEnabled() { return enabled; } 

et

 private boolean storesOpen; public boolean isStoresOpen() { return storesOpen; } 

isStoresOpen () n’a pas de sens en anglais.

Cela peut ne pas avoir de sens grammaticalement, mais cela suit la convention et semble assez lisible.

Beaucoup d’outils s’attendent à ce que ce is ou non, et ils le seront probablement.

Essayez de les reformuler, comme getDogsAreFuzzy() ou getStoresAreOpen() ou des choses comme ça pour une meilleure compatibilité et conventions.

La spécification Java Bean indique qu’il faut utiliser get pour les getters, sauf si c’est un boolean alors l’utilisation is . is est non standard et ne sera pas reconnu par tout ce qui attend un nommage Bean standard.

isEnabled() peut également être écrit en tant que getEnabled() dans Java naming conventions .

C’est juste une bonne habitude de suivre les conventions de nommage, aidez lorsque vous travaillez avec Java Beans .

En général, je pense que le code devrait être aussi facilement lisible que possible, de sorte qu’une méthode puisse presque être lue comme un paragraphe (comme le préconise Clean Code ). Par conséquent, je nommerais la méthode à sonner / lire aussi facilement que possible et à suivre la règle de gramme de. Avec les IDE modernes, il est facile de trouver des méthodes sans rechercher spécifiquement get / is .

Cependant, Kumar fait un bon argument sur les haricots. Beaucoup d’outils ne chercheront que get / is . Dans ce cas, je pourrais envisager d’avoir les deux méthodes. Un pour la facilité de lecture et un pour l’utilisation des outils.

À quelle langue écrivez-vous: anglais ou Java ?

Quand je lis du code Java, je m’attends à ce que les choses soient là, le fait de devoir rechercher les deux getters, avec les préfixes is et is , sera plus compliqué que de chercher un seul préfixe.

Par contre, quand je lis le journal le matin, je ne cherche rien, alors vous pouvez écrire de manière plus traditionnelle en anglais.

retourne 0;

Dans la programmation orientée object, cela devrait rarement, voire jamais, se produire depuis Store ou Cat ou ce que vous devriez être une classe séparée, avec sa propre isOpen() ou isFuzzy() . Si vous avez un type supérieur, envisagez de diviser le niveau atomique que vous utilisez actuellement. En général, les objects ne doivent pas être pluriels au niveau le plus bas.

Dans votre question, vous posez explicitement des questions sur les getters. Un getter renvoie des informations sur une instance de votre classe. Par exemple, vous avez une classe Store . isStoreOpen est maintenant un nom de méthode parfaitement adapté à un getter.

Ensuite, vous mentionnez une méthode qui vérifie si tous les magasins sont ouverts. Cette méthode n’est pas du tout un getter, car elle ne renvoie pas d’informations sur une instance, mais sur toutes. Bien sûr, sauf s’il existe une classe Stores . Si tel est le cas, vous devez repenser votre conception, car Java a déjà des moyens de stocker un certain nombre d’instances, par exemple des tableaux ou des collections, de sorte que vous n’avez pas à écrire de classes supplémentaires.

Si ce n’est pas le cas, le nom de cette méthode est parfaitement correct. Une alternative peut être juste allStoresOpen sans le ‘is’.

TL; DR: Si vous avez affaire à plusieurs instances, ce n’est pas un getter. Si c’est le cas, votre conception est mauvaise.

En toute honnêteté, je dirais que certainement oublier le are* et restr avec is* . Pensez au "is" comme la signification de la variable et faites un meilleur nom si possible.

Je dirais que isStoresOpen ne sonne pas si mal, mais vous pouvez faire isStoresAreOpen si cela vous semble mieux.

Mais mon idée générale serait de respecter les conventions. Qui utilise “get” pour les getters et “is” pour les types booléens. Personnellement, je pense que l’utilisation de “est” est parfois déjà problématique. Oui, ça a l’air bien dans les conditions “if”, mais parfois j’écris simplement “get” lors du codage et vérifie la liste déroulante de ma variable nécessaire et commence à me demander ce qui ne va pas et pourquoi je ne la trouve pas. commence par “est” …

isStoresOpen () dans ce StoresOpen semble être un pluriel,

Lorsque vous suivez les standards Java Naming Convention et Java Beans, ils ont des préfixes prédéfinis pour les types booléens et autres, vous devez donc suivre Java Beans Naming Convention.

Allons à votre point Quand vous voyez des magasinsOpen comme dans une perspective anglaise, oui cela ressemble au pluriel. Encore une fois, observez profondément ce mot,

Ici

storesOpen est pluriel selon la grammaire anglaise,

La sortie de isStoresOpen n’est pas plurielle, au lieu d’être singulière ou vous pouvez dire qu’elle est scalaire en termes de convention de programmation.

C’est dehors c’est booléen, juste vrai ou faux

Pas comme votre déclaration de pluriel anglais true ou false

Pas un tableau de true ou false , ou pas une collection de true ou false

Donc, ici, nous pouvons dire que, ici, nous sums concernés par la valeur qui est le retour de cette méthode booléenne, pas le nom donné à la propriété de classe à point entité du monde réel.

Une chose plus importante est que, chaque fois que de telles propriétés booléennes sont utilisées dans des classes et que celles-ci sont utilisées par des bibliothèques prédéfinies dans un framework, le framework avec le préfixe use ‘ is ‘ pour récupérer des valeurs booléennes,

Pourquoi signifie-t-il que ce n’est pas beaucoup plus intelligent que vous, comme vous le savez, la grammaire anglaise comme pluriel / singulier, multiplexeur etc …