如何编写简洁的if-else语句,避免多层嵌套提升代码可读性?
多层嵌套if-else的优化方案
你之前了解的提前返回(卫语句)写法完全可以适配当前场景,核心优化思路是优先判断不符合主逻辑的边缘条件,提前执行公共分支后退出,避免不必要的嵌套堆叠。
原代码的逻辑本质非常清晰:只有年、月、日三个值完全和joinTime对应值匹配时,才执行channel.send(message),其余所有不匹配的场景都统一执行comparison(day, hour, minute)。
优化后代码(卫语句写法,和你之前了解的优化逻辑一致)
首先把重复执行的parseInt提取出来避免冗余计算,再依次用反条件做提前判断:
// 提前做类型转换,避免重复执行parseInt const yearNum = parseInt(year) const monthNum = parseInt(month) const dayNum = parseInt(day) // 依次判断不匹配的情况,提前执行公共分支后退出 if (yearNum !== joinTime.getFullYear()) { comparison(day, hour, minute) return } if (monthNum !== joinTime.getMonth() + 1) { comparison(day, hour, minute) return } if (dayNum !== joinTime.getDay()) { comparison(day, hour, minute) return } // 所有条件都匹配,执行主逻辑 channel.send(message)
更精简的合并条件写法
如果判断逻辑不会后续扩展,也可以把三个匹配条件合并为一个判断,代码更短:
const yearNum = parseInt(year) const monthNum = parseInt(month) const dayNum = parseInt(day) const isJoinDateMatch = yearNum === joinTime.getFullYear() && monthNum === joinTime.getMonth() + 1 && dayNum === joinTime.getDay() isJoinDateMatch ? channel.send(message) : comparison(day, hour, minute)
两种写法都完全消除了多层嵌套,代码逻辑从上到下线性递进,可读性远高于原嵌套写法。
内容的提问来源于stack exchange,提问作者Max von der Mühle
相关产品推荐
相关产品推荐

