Согласно Неправильно ли использовать логический параметр для определения поведения? Я знаю важность избегания использования логических параметров для определения поведения, например:
оригинальная версия
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
и т.д. Так зачем менять это на два слова? Кроме того, «более естественный» в глазах смотрящего. Если вы хотите произнести это как английское предложение, то для меня было бы более естественным иметь «если подсказка включена» с «заправленной» буквой.