如何简洁实现值的条件增减?现有代码方案寻求优化
嘿,我完全懂你想把这段逻辑简化成更紧凑形式的心情——谁不想让代码更清爽直观呢!不过得先提一句,你设想的var state = (getState() < state) ? state++ : state--;其实存在几个逻辑问题:
state++和state--是后置自增/自减运算符,它们会先返回state的当前值,再修改变量。所以这样赋值的话,state最终拿到的是修改前的旧值,完全达不到你想要的更新效果;- 如果
state已经是之前声明过的变量,这里重复用var不仅没必要,还可能引发变量提升相关的问题。
不过确实有更简洁且正确的写法,直接把增量计算和赋值合并成一行就行,给你几个实用方案:
方案1:最简洁的直接赋值写法
state += getState() < state ? -1 : 1;
这行代码完全等价于你原来的两行逻辑:先判断增减方向,再给state加上对应的值,一步到位,简洁清晰。
方案2:封装成复用函数(适合多处调用场景)
如果这个条件增减的逻辑会在多个地方用到,可以封装成一个语义化的小函数,让代码可读性更强:
const adjustState = (currentState, targetState) => currentState + (targetState < currentState ? -1 : 1); // 使用时直接调用: state = adjustState(state, getState());
函数名直接说明了功能,后续维护或修改逻辑时也更方便。
补充:为什么你的设想写法逻辑错误?
举个实际例子:假设当前state是5,getState()返回3,此时getState() < state为true,会执行state++。但state++会先把原来的5赋值给state,之后才把state改成6——这完全和你想要的"state减1"的目标相反,所以这种写法逻辑不成立。
总之,方案1是最贴合你需求的简洁写法,一行搞定且逻辑准确!
内容的提问来源于stack exchange,提问作者Himmators
相关产品推荐
相关产品推荐

