web-dev-qa-db-fra.com

Pour un champ booléen, quelle est la convention de dénomination pour son getter/setter?

Par exemple.

boolean isCurrent = false;

Comment appelez-vous son getter et setter?

131
user496949

Supposons que vous ayez 

boolean active;

La méthode des accesseurs serait

public boolean isActive(){return this.active;}

public void setActive(boolean active){this.active = active;}

Voir également

192
Jigar Joshi

http://geosoft.no/development/javastyle.html#Specific

  1. Le préfixe is devrait être utilisé pour les variables et méthodes booléennes. 

    isSet, isVisible, isFinished, isFound, isOpen

Ceci est la convention de nommage pour méthodes et variables booléennes utilisées par Sun pour les packages principaux Java. L'utilisation du préfixe is résout un problème commun problème de choix de mauvais noms booléens comme statut ou drapeau. isStatus ou isFlag ne convient tout simplement pas, et le le programmeur est obligé de choisir plus noms significatifs. 

Méthodes Setter pour les variables booléennes doit avoir défini le préfixe comme dans: 

void setFound(boolean isFound);

Il existe quelques alternatives à la is préfixe qui convient mieux à certains des situations. Ce sont a, peuvent et les préfixes devraient-ils: 

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

Pour un champ nommé isCurrent, le nom correct du getter/setter est setCurrent()isCurrent() (du moins c'est ce que pense Eclipse), ce qui est très déroutant et permet de remonter au problème principal:

Votre champ ne devrait pas s'appeler isCurrent en premier lieu. _/Is est un verbe et les verbes sont inappropriés pour représenter l'état d'un objet. Utilisez un adjectif à la place, et tout à coup vos noms de getter/setter auront plus de sens:

private boolean current;

public boolean isCurrent(){
    return current;
}

public void setCurrent(final boolean current){
    this.current = current;
}
55
Sean Patrick Floyd

Je crois ce serait:

void setCurrent(boolean current)
boolean isCurrent()
4
miku

Peut-être qu'il est temps de commencer à réviser cette réponse? Personnellement, je voterais pour setActive() et unsetActive() (les alternatives peuvent être setUnActive(), notActive(), disable(), etc. selon le contexte) car "setActive" implique que vous l'activiez à tout moment, ce que vous ne faites pas. C'est un peu contre-intuitif de dire "setActive" mais de supprimer l'état actif.

Un autre problème est que vous ne pouvez pas écouter spécifiquement un événement SetActive d'une manière CQRS, vous devez écouter un 'setActiveEvent' et déterminer à l'intérieur de cet écouteur si le paramètre est réellement actif ou non. Ou bien sûr, déterminez quel événement appeler lorsque vous appelez setActive(), mais cela va alors à l'encontre du principe de séparation des problèmes.

L'article sur FlagArgument de Martin Fowler est une bonne lecture: http://martinfowler.com/bliki/FlagArgument.html

Cependant, je viens de PHP et je vois de plus en plus cette tendance. Je ne sais pas combien cela vit avec le développement Java.

3

En tant que passeur, que diriez-vous de:

// setter
public void beCurrent(boolean X) {
    this.isCurrent = X;
}

ou

// setter
public void makeCurrent(boolean X) {
    this.isCurrent = X;
}

Je ne sais pas si ces noms ont du sens pour les anglophones.

0
amekusa
private boolean current;

public void setCurrent(boolean current){
    this.current=current;
}

public boolean hasCurrent(){
    return this.current;
}
0
Mkne