- 我们在开发过程中,有时候会遇到多个布尔值条件判断的情况,目前我们项目里的写法大多都是将各种判断糅杂在一起,这样非常不利于阅读和维护。
- 这里给大家推荐下谷歌官方的处理方式。
- 主要有两种优化方案。
例如,一个判断条件如下:
if ((!pepperoniService.empty() || sausages.size() > 0) && (useOnionFlag.get() || hasMushroom(ENOKI, PORTOBELLO)) && hasCheese()) {...}
第一步,将条件提取为一个命名准确的变量:
const isPizzaFantastic = (!pepperoniService.empty() || sausages.size() > 0) && (useOnionFlag.get() || hasMushroom(ENOKI, PORTOBELLO)) && hasCheese();if (isPizzaFantastic) {...
}
方法一,将布尔值分类:
const hasGoodMeat = !pepperoniService.empty() || sausages.size() > 0;
const hasGoodVeggies = useOnionFlag.get() || hasMushroom(ENOKI, PORTOBELLO);
const isPizzaFantastic = hasGoodMeat && hasGoodVeggies && hasCheese();if (isPizzaFantastic) {...}
方法二,将逻辑隐藏在单独的方法中,用卫语句将条件提前返回:
function isPizzaFantastic() {if (!hasCheese()) {return false;}if (pepperoniService.empty() && sausages.size() == 0) {return false;}return useOnionFlag.get() || hasMushroom(ENOKI, PORTOBELLO);}