我想在0和1之间切换一个变量。如果是0,我就设它为1,如果是1,我就设它为0。
这是一个非常基本的运算,我经常写,我想研究一下最短,最清晰的方法。这是我目前为止最好的:
v = (v == 0 ? 1 : 0);
你能改进一下吗?
编辑:这个问题问的是如何在保持清晰的情况下用最少的字符写出上面的语句——为什么这“不是一个真正的问题”?这并不是一个代码-高尔夫练习,尽管一些有趣的答案来自于把它当作高尔夫的人——很高兴看到高尔夫以一种建设性和发人深省的方式被使用。
我想在0和1之间切换一个变量。如果是0,我就设它为1,如果是1,我就设它为0。
这是一个非常基本的运算,我经常写,我想研究一下最短,最清晰的方法。这是我目前为止最好的:
v = (v == 0 ? 1 : 0);
你能改进一下吗?
编辑:这个问题问的是如何在保持清晰的情况下用最少的字符写出上面的语句——为什么这“不是一个真正的问题”?这并不是一个代码-高尔夫练习,尽管一些有趣的答案来自于把它当作高尔夫的人——很高兴看到高尔夫以一种建设性和发人深省的方式被使用。
当前回答
只是为了好玩:v = Math.pow(v-1,v)也在1和0之间切换。
其他回答
一般来说,当你需要在两个值之间切换时,你可以从两个切换值的和中减去当前值:
0,1 -> v = 1 - v 1,2 -> v = 3 - v 4,5 -> v = 9 - v
如果它必须是整数1或0,那么你这样做是好的,尽管括号是不需要的。如果这些a被用作布尔值,那么你可以这样做:
v = !v;
比如v= 1 - v,或者v ^= 1或者v= +!v都能完成工作,但它们构成了我所说的黑客。这些不是漂亮的代码行,而是达到预期效果的廉价技巧。1 - v不传达“在0和1之间切换值”。这会降低代码的表现力,并引入一个地方(尽管很小),另一个开发人员将不得不解析您的代码。
相反,使用v = toggle(v)这样的函数可以快速传达意图。
你可以这样做
v = Math.abs(--v);
自减式将值设置为0或-1,然后Math。Abs将-1转换为+1。
未经测试,但如果你是布尔,我认为var v = !v将工作。
参考:http://www.jackfranklin.co.uk/blog/2011/05/a-better-way-to-reverse-variables