Secondo È sbagliato usare un parametro booleano per determinare il comportamento? , Conosco l'importanza di evitare l'uso di parametri booleani per determinare un comportamento, ad esempio:
versione originale
public void setState(boolean flag){
if(flag){
a();
}else{
b();
}
c();
}
nuova versione:
public void setStateTrue(){
a();
c();
}
public void setStateFalse(){
b();
c();
}
Ma che dire del caso in cui il parametro booleano viene utilizzato per determinare i valori anziché i comportamenti? per esempio:
public void setHint(boolean isHintOn){
this.layer1.visible=isHintOn;
this.layer2.visible=!isHintOn;
this.layer3.visible=isHintOn;
}
Sto cercando di eliminare la bandiera isHintOn e creare 2 funzioni separate:
public void setHintOn(){
this.layer1.visible=true;
this.layer2.visible=false;
this.layer3.visible=true;
}
public void setHintOff(){
this.layer1.visible=false;
this.layer2.visible=true;
this.layer3.visible=false;
}
ma la versione modificata sembra meno mantenibile perché:
ha più codici rispetto alla versione originale
non può mostrare chiaramente che la visibilità di layer2 è opposta all'opzione di suggerimento
quando viene aggiunto un nuovo livello (ad esempio: layer4), devo aggiungere
this.layer4.visible=false;
e
this.layer4.visible=true;
in setHintOn () e setHintOff () separatamente
Quindi la mia domanda è, se il parametro booleano viene utilizzato per determinare solo i valori, ma non i comportamenti (ad es. No if-else su quel parametro), si consiglia comunque di eliminare quel parametro booleano?
setHint(boolean isHintOn)
come un privato metodo, e aggiungere pubblico setHintOn
e setHintOff
metodi che chiamano, rispettivamente, setHint(true)
e setHint(false)
.
setHint(true|false)
. Potahto di patate. Almeno usa qualcosa come setHint
e unsetHint
.
is
all'inizio. isValid
ecc. Quindi perché cambiarlo con due parole? Inoltre, "più naturale" è negli occhi di chi guarda. Se vuoi pronunciarlo come una frase inglese, allora per me sarebbe più naturale avere "se il suggerimento è attivo" con un "the" nascosto.