JS开发中如何避免相同if判断在函数多个位置重复出现
优化方案
方案1:封装条件判断工具函数(改动最小,适合单开关场景)
把重复的if判断提前封装成一个通用执行函数,后续需要判断开关的位置直接调用该函数传入要执行的逻辑即可,无需重复写条件判断。
代码示例:
function doStuffWithJSON(options={}) { // 仅需一次判断封装,后续复用 const runIfEnabled = (action) => options.logAndChuck && action(); const apiRes = getJSONFromAPI(); runIfEnabled(() => console.log('we got results successfully')); //50行无条件执行的代码 runIfEnabled(() => console.log('we did stuff with the result')); //另外50行无条件执行的代码 runIfEnabled(() => sendJsonToS3(apiRes)); }
方案2:钩子函数模式(扩展性更强,适合多自定义操作场景)
如果后续可能新增更多可选的执行逻辑,可以把流程节点的回调作为参数开放,用可选链控制执行,完全消除重复判断,同时降低逻辑耦合度。
代码示例:
function doStuffWithJSON(options={}) { const apiRes = getJSONFromAPI(); options.onAfterFetch?.(); //50行无条件执行的代码 options.onAfterFirstProcess?.(); //另外50行无条件执行的代码 options.onFinal?.(apiRes); } // 调用方按需传入对应节点的执行逻辑 doStuffWithJSON({ onAfterFetch: () => console.log('we got results successfully'), onAfterFirstProcess: () => console.log('we did stuff with the result'), onFinal: (res) => sendJsonToS3(res) })
方案选择建议
- 如果当前只有
logAndChuck一个开关,且后续不会新增其他可选操作,选方案1即可,改动成本极低,代码可读性高。 - 如果后续需要支持调用方自定义不同节点的操作,选方案2,可扩展性更好,不需要修改核心逻辑就能支持新的可选操作。
内容的提问来源于stack exchange,提问作者user2402616
相关产品推荐
相关产品推荐

