Согласно Неправильно ли использовать логический параметр для определения поведения? Я знаю важность избегания использования логических параметров для определения поведения, например:
оригинальная версия
public void setState(boolean flag){
if(flag){
a();
}else{
b();
}
c();
}
новая версия:
public void setStateTrue(){
a();
c();
}
public void setStateFalse(){
b();
c();
}
Но как насчет случая, когда логический параметр используется для определения значений вместо поведения? например:
public void setHint(boolean isHintOn){
this.layer1.visible=isHintOn;
this.layer2.visible=!isHintOn;
this.layer3.visible=isHintOn;
}
Я пытаюсь устранить флаг isHintOn и создать 2 отдельные функции:
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;
}
но модифицированная версия кажется менее ремонтопригодной, потому что:
в нем больше кодов, чем в оригинальной версии
это не может ясно показать, что видимость layer2 противоположна опции подсказки
когда новый слой (например: layer4) добавлен, мне нужно добавить
this.layer4.visible=false;а также
this.layer4.visible=true;в setHintOn () и setHintOff () отдельно
Поэтому у меня вопрос: если булев параметр используется только для определения значений, но не для поведения (например, нет в этом параметре if-else), рекомендуется ли по-прежнему исключать этот булев параметр?
setHint(boolean isHintOn)как частный метод и добавьте открытый setHintOnи setHintOffметоды, которые соответственно вызывают setHint(true)и setHint(false).
setHint(true|false). Картофельные потахто. По крайней мере, использовать что-то вроде setHintи unsetHint.
isв начале. isValidи т.д. Так зачем менять это на два слова? Кроме того, «более естественный» в глазах смотрящего. Если вы хотите произнести это как английское предложение, то для меня было бы более естественным иметь «если подсказка включена» с «заправленной» буквой.