如何在同一行比较三个变量并返回布尔值?

3
我看到有人使用以下代码在一行上执行if和else语句: return var1 != null ? var2 : 0; 这种方法比编写if语句和多行代码更加紧凑和快捷。
上面的return语句是一个例子,我无法创建类似的东西,因为我不知道如何在return行上使用if和else语句的语法。
当前情况:
有3个整数。
我想比较如果var1大于var2,并且(&&如果(var1 + var3)大于var2。如果这些条件都为真,则return语句应该返回false,否则返回true。
尝试:
return var1 > var2 && (var1 + var3) > var2 ? false : true;

2
附注:您永远不应该编写 condition ? false : true!condition 更简单。 - Andy Turner
@Eran 是的,完全正确,感谢您的更正,帖子已更新。 - stringExchange
3个回答

6
如果var1var2大,则为此条件:
var1 > var2

如果var1 + var3var2大,这个条件是成立的:
var1 + var3 > var2

如果两个条件都匹配,则返回 false,否则返回 true:

return !(var1 > var2 && var1 + var3 > var2);

另外一种方法是否定每个条件,得到:

return (var1 <= var2 || var1 + var3 <= var2);

(如果没有任何数字为NaN,则它等效。) ?:运算符是不必要的。

1
不是吗?
return !(var1 > var2 && (var1 + var3) > var2);

足够了吗?

使用布尔代数,我们可以简化 ! 运算符: !(a and b) = !a or !b

return var1 <= var2 || (var 1 + var 3) <= var2;

0

您可以输入:

return !(var1 > var2 && (var1 + var3) > var2);

@Mike 这始终是开发人员的选择。如果 OP 想要一行代码,可能比可读性更重要……这变成了风格或观点的问题。 - ernest_k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接