是否有一种内联方法可以有条件地否定一个值或表达式,而不必使用如下的条件评估?:
result = (condition) ? value : -value;
result = value * ((condition) ? 1 : -1);
我目前正在使用 JavaScript,但我一直想知道其他使用它的语言也是如此。
是否有一种内联方法可以有条件地否定一个值或表达式,而不必使用如下的条件评估?:
result = (condition) ? value : -value;
result = value * ((condition) ? 1 : -1);
我目前正在使用 JavaScript,但我一直想知道其他使用它的语言也是如此。
你可以做到(bool - !bool * 1) * value
。(bool - !bool * 1)
返回1
真,-1
假。一种方法可能是矫枉过正;坚持原来的可读代码。使用 C/C++,您可以摆脱宏(但要小心bool
会被评估两次)。
编辑:(bool - !bool) * value
适用于 Javascript 和 PHP(尚未测试其他)。我想我* 1
最初添加了,以防它无法弄清楚它应该是一个 int :P
我不确定这是否更快(尽管我相信算术表达式比分支更快),并且正如其他人所说,您可能不需要担心速度。您也没有节省很多字符:P
如果您担心可读性,这里有一个更容易理解的替代方案:
result = value;
if(some_condition){
result *= -1;
}