如何重构多值匹配的if条件判断?是否有更优实现方式?
判断逻辑重构建议
现有写法并非错误,在匹配项固定、后续几乎不会调整的场景下可以直接保留,逻辑直白没有额外理解成本。如果后续需要频繁增减匹配的按钮索引,推荐按以下方案重构,可维护性会明显提升:
- 集合包含判断(最通用)
将所有需要匹配的索引统一存入哈希集合或数组,直接判断目标值是否在集合内即可,后续增删匹配规则只需要修改集合内容,不用反复写buttonindex ==和||,也能避免漏写逻辑符的低级错误。
代码示例(以JS/TS环境为例,其他语言逻辑一致):
// 建议将匹配集合定义为常量,放在全局常量/配置区统一管理 const TARGET_BUTTON_INDEXS = new Set([1, 4, 10, 12, 14, 15, 17, 18]); if (TARGET_BUTTON_INDEXS.has(buttonindex)) { dosomething(); }
如果运行环境不支持Set,用数组的includes方法也能实现相同效果:
const TARGET_BUTTON_INDEXS = [1, 4, 10, 12, 14, 15, 17, 18]; if (TARGET_BUTTON_INDEXS.includes(buttonindex)) { dosomething(); }
- 补充语义化常量(不管用不用集合都推荐做)
如果这些索引值对应具体的业务按钮(比如1代表确认、4代表取消),不要直接裸写魔法数字,先定义为有明确含义的常量,哪怕保留原有的多或判断写法,可读性也会大幅提升,后续修改按钮映射值的时候不用全代码找数字改。
示例:
// 按钮索引常量定义 const BTN_CONFIRM = 1; const BTN_CANCEL = 4; const BTN_EXPORT = 10; const BTN_SHARE = 12; const BTN_DELETE = 14; const BTN_EDIT = 15; const BTN_COPY = 17; const BTN_MOVE = 18; if ( buttonindex == BTN_CONFIRM || buttonindex == BTN_CANCEL || buttonindex == BTN_EXPORT || buttonindex == BTN_SHARE || buttonindex == BTN_DELETE || buttonindex == BTN_EDIT || buttonindex == BTN_COPY || buttonindex == BTN_MOVE ) { dosomething(); }
如果最终决定保留原有写法,建议把每个判断条件换行对齐,补上原代码里缺失的空格(原代码17||之间没有空格),格式更规整读起来也不费劲:
if ( buttonindex == 1 || buttonindex == 4 || buttonindex == 10 || buttonindex == 12 || buttonindex == 14 || buttonindex == 15 || buttonindex == 17 || buttonindex == 18 ) { dosomething(); }
内容的提问来源于stack exchange,提问作者fatdrogen
相关产品推荐
相关产品推荐

