0

是否有一种内联方法可以有条件地否定一个值或表达式,而不必使用如下的条件评估?:

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

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

4

2 回答 2

1

你可以做到(bool - !bool * 1) * value(bool - !bool * 1)返回1真,-1假。一种方法可能是矫枉过正;坚持原来的可读代码。使用 C/C++,您可以摆脱宏(但要小心bool会被评估两次)。

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

我不确定这是否更快(尽管我相信算术表达式比分支更快),并且正如其他人所说,您可能不需要担心速度。您也没有节省很多字符:P

于 2013-07-17T22:12:22.867 回答
1

如果您担心可读性,这里有一个更容易理解的替代方案:

result = value;
if(some_condition){
    result *= -1;
}
于 2013-07-17T22:14:03.343 回答