Według Czy niewłaściwe jest używanie parametru boolowskiego do określania zachowania? , Wiem, jak ważne jest unikanie używania parametrów boolowskich do określania zachowania, np .:
orginalna wersja
public void setState(boolean flag){
if(flag){
a();
}else{
b();
}
c();
}
Nowa wersja:
public void setStateTrue(){
a();
c();
}
public void setStateFalse(){
b();
c();
}
Ale co z przypadkiem, w którym parametr boolowski jest używany do określania wartości zamiast zachowań? na przykład:
public void setHint(boolean isHintOn){
this.layer1.visible=isHintOn;
this.layer2.visible=!isHintOn;
this.layer3.visible=isHintOn;
}
Próbuję wyeliminować flagę isHintOn i utworzyć 2 osobne funkcje:
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;
}
ale zmodyfikowana wersja wydaje się mniej konserwowalna, ponieważ:
ma więcej kodów niż oryginalna wersja
nie może wyraźnie pokazać, że widoczność warstwy 2 jest przeciwna do opcji podpowiedzi
kiedy dodaje się nową warstwę (np .: layer4), muszę ją dodać
this.layer4.visible=false;
i
this.layer4.visible=true;
na setHintOn () i setHintOff () oddzielnie
Więc moje pytanie brzmi: jeśli parametr boolowski jest używany tylko do określania wartości, ale nie zachowań (np .: brak parametru if-else tego parametru), czy nadal zaleca się wyeliminowanie tego parametru boolowskiego?
setHint(boolean isHintOn)
jako metodę prywatną i dodaj public setHintOn
oraz setHintOff
metody, które odpowiednio wywołują setHint(true)
i setHint(false)
.
setHint(true|false)
. Ziemniak Potahto Przynajmniej użyj czegoś takiego jak setHint
i unsetHint
.
is
na początku. isValid
itd. Więc po co to zmieniać na dwa słowa? Poza tym „bardziej naturalny” jest w oku patrzącego. Jeśli chcesz wymówić to zdanie w języku angielskim, bardziej naturalne byłoby dla mnie „jeśli wskazówka jest włączona” z „the” schowanym.