内联条件否定

时间:2013-07-17 22:08:00

标签: java javascript c++ c

是否有一种内联方式可以有条件地否定某个值或表达式而无需使用如下所示的条件评估?:

result = (condition) ? value : -value;
result = value * ((condition) ? 1 : -1);

我目前正在使用JavaScript,但我一直想知道使用它的其他语言。

2 个答案:

答案 0 :(得分:1)

你可以(bool - !bool * 1) * value(bool - !bool * 1)返回1表示true,-1表示false。一种方法可能有点过分;坚持原始的可读代码。使用C / C ++,您可以使用宏(但要小心bool将被评估两次)。

编辑:(bool - !bool) * value适用于Javascript和PHP(尚未测试其他人)。我想我最初添加了* 1,以防它无法弄清楚应该是一个int:P

我不确定这是否更快(虽然我相信算术表达式比分支更快),而且正如其他人所说,你可能不需要担心速度。你也没有在很多角色上保存:P

答案 1 :(得分:1)

如果你担心可读性,这里有一个更容易理解的选择:

result = value;
if(some_condition){
    result *= -1;
}