我之前在代码中看过这个,但是忘了它。基本上它切换一个布尔变量。如果是真的,它将设置为false,反之亦然。但遗憾的是忘记了语法。
它基本上是一个单行:
if (myVar) {
myVar = false;
} else {
myVar = true;
}
它是这样的,但不知道它的名称或正确的语法:
myVar = myVar : false ? true;
答案 0 :(得分:70)
怎么样
myVar = !myVar
答案 1 :(得分:27)
答案 2 :(得分:17)
另一种选择是XOR:
myVar ^= true;
值得注意的是,只有任务的LHS发生变化;右边是常量,将切换任何布尔变量。然而,否定的更多是自我记录的IMO。
答案 3 :(得分:5)
您在考虑的是条件运算符:
myVar = myVvar ? false : true;
(正如你所看到的,很多人称之为“三元运算符”,但这只意味着它是一个有三个操作数的运算符。实际上,只有一个运算符在这种语言中有三个操作数,但是它仍然没有说明运营商做了什么。)
使用否定运算符当然更容易:
myVar = !myVar;
答案 4 :(得分:4)
目前我能想到的最小代码。我不知道它叫什么(如果它有一个名字,正如你似乎建议的那样)
myVar = !myVar
答案 5 :(得分:4)
您所谈论的是“三元”或“条件”运算符,它根据条件执行内联替换。
语法为:
condition ? trueValue : falseValue
我经常在我的条件下抛出括号,有时在整个条件运算符周围。取决于我试图从其他所有内容中描绘它的程度。
例如,假设您想要返回两个数字中较大的一个:
public int max(int a, int b)
{
return (a > b) ? a : b;
}
请注意,它可以替换为其他内容。
好的,现在让我们解决关于切换布尔类型的实际问题。
myVar = (myVar) ? false : true;
是如何使用条件运算符完成的。 (同样,括号不是必需的,我只是喜欢它们。)
但是有一种更简单的方法来切换布尔值...使用逻辑NOT(“!”)运算符:
myVar = !myVar;
保持简单。 : - )
答案 6 :(得分:3)
if(myVar == true)
{
myVar = false;
}
else if (myVar == false)
{
myVar = true;
}
else
{
myVar = FILE_NOT_FOUND
}
答案 7 :(得分:2)
这也有效:P
v=v?!v:!v;
答案 8 :(得分:0)
有一个三元运算符(wikipedia)。这允许你编写一个浓缩的if-else语句,就像在第二个例子中一样。
在java中:
myVar = (myVar) ? true : false;
还有NOT运算符,用于切换布尔变量。在java中就是!我相信这就是你想要的。
myVar = !myVar;
答案 9 :(得分:0)
public boolean toggle(boolean bool)
{
return !bool;
}
答案 10 :(得分:0)
我最近(我自己)找到了一个类似的答案,已经在这里说过了。但是,最简单和最短(具有最少代码的非重复变量名称)答案是:
formControl.disabled ^= 1;
当想要切换布尔值,基于DOM的属性(例如,表单控件/输入的禁用属性 - 从不可编辑状态转换为编辑状态)时,这在JavaScript中效果最佳。经过多次搜索(没有我喜欢的结果)和一些反复试验,我发现我的解决方案是最简单的(但是,真正的而不是1会更清楚 - 就像之前发布的那样)。
由于这种语法不是很清楚,我不建议经常使用它(我认为当变量或属性使上下文明显时这是合适的)。我发布了这个响应(而不是发表评论),因为应该使用XOR按位自我赋值的上下文非常重要。在考虑最佳实践时,应该主要避免这种“伎俩”。
答案 11 :(得分:-1)
正如其他人所说,有两种方法可以否定某些内容:“左值=!左值;”和“左值^ = 1;”。认识到差异很重要。
如果它是零,则说“lvalue =!lvalue”将使lvalue设置为1,如果设置为其他任何,则将其设置为0。左值将被评估两次;这不是简单变量的一个因素,但是说“someArray [index1] [index2] [index3] [index4] =!someArray [index1] [index2] [index3] [index4]”可能会减慢速度。
说“左值^ = 1;”如果它是0,则会导致左值设置为1,如果它是1,则将其设置为0,如果它既不是零也不是1,则将其他值设置为其他值。仅需要指定或评估左值,并且如果已知该值为零或者1,这种形式可能会更快。
太糟糕了,没有自动否定操作员;有时候这样的事情会很方便。
答案 12 :(得分:-2)
您也可以使用此处所示的二进制形式的否定。
if ((v == true) && !(v = false)) {
v != true; /* negate with true if true. */
} else {
v =! false; /* negate with false if false. */
}