De acordo com É errado usar um parâmetro booleano para determinar o comportamento? , Eu sei a importância de evitar o uso de parâmetros booleanos para determinar um comportamento, por exemplo:
versão original
public void setState(boolean flag){
if(flag){
a();
}else{
b();
}
c();
}
nova versão:
public void setStateTrue(){
a();
c();
}
public void setStateFalse(){
b();
c();
}
Mas e o caso em que o parâmetro booleano é usado para determinar valores em vez de comportamentos? por exemplo:
public void setHint(boolean isHintOn){
this.layer1.visible=isHintOn;
this.layer2.visible=!isHintOn;
this.layer3.visible=isHintOn;
}
Estou tentando eliminar o sinalizador isHintOn e criar 2 funções separadas:
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;
}
mas a versão modificada parece menos sustentável porque:
tem mais códigos que a versão original
não pode mostrar claramente que a visibilidade da camada2 é oposta à opção de dica
quando uma nova camada (por exemplo: layer4) é adicionada, preciso adicionar
this.layer4.visible=false;e
this.layer4.visible=true;em setHintOn () e setHintOff () separadamente
Portanto, minha pergunta é: se o parâmetro booleano for usado apenas para determinar valores, mas não comportamentos (por exemplo: nenhum if-else nesse parâmetro), ainda é recomendável eliminar esse parâmetro booleano?
setHint(boolean isHintOn)como um privado método, e adicionar pública setHintOne setHintOffmétodos que respectivamente chamam setHint(true)e setHint(false).
setHint(true|false). Potahto de batata. Pelo menos use algo como setHinte unsetHint.
isno início. isValidetc. Então, por que mudar isso por duas palavras? Além disso, "mais natural" está nos olhos de quem vê. Se você quer pronunciar-lo como uma frase Inglês, em seguida, para mim seria mais natural ter "se a dica é sobre" com um "a" dobrado.