C++中优雅结合switch、if与变量赋值的代码优化咨询
代码优化方案(解决重复调用do_something的冗余问题)
原代码
enum possible_cases; //assigned somewhere bool decision; //assigned somewhere //basically the default action for my possible_cases int value = 10; do_something(value); switch (possible_cases) { case 0: //assume covered by do_something(value) break; case 1: if ( decision ) { value = get_other_value(); do_something(value); } break; case 2: value = get_other_value(); //will return same value as in case 1 do_something(value); break; }
问题背景
- 必须用固定值10调用一次
do_something() - 部分case需要额外用
get_other_value()的结果调用do_something(),且case后续会持续增加,用布尔值判断的方式扩展性差 - 当前代码重复调用
do_something(),冗余度高,想从代码美观性角度优化,同时保留enum的case结构
优化后代码
enum possible_cases; //assigned somewhere bool decision; //assigned somewhere int value = 10; // 执行默认调用 do_something(value); bool needExtraCall = false; switch (possible_cases) { case 0: break; case 1: needExtraCall = decision; break; case 2: needExtraCall = true; break; // 新增case时,只需在这里设置是否需要额外调用的逻辑 // case 3: // needExtraCall = some_new_condition; // break; } // 统一处理额外调用逻辑 if (needExtraCall) { value = get_other_value(); do_something(value); }
优化亮点
- 把重复的
do_something()调用逻辑拆分,默认调用只执行一次,避免代码冗余 - 用
needExtraCall变量统一管控额外调用的触发条件,新增case时只需维护这个变量的赋值逻辑,不用重复写调用代码,扩展性更好 - 代码结构分层清晰,逻辑一目了然,可读性和维护性都提升了
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

