[英]java ternary operator can be replaced with Math.max call
我有以下代码delay = (delay>200)? delay: 200;
delay = (delay>200)? delay: 200;
Java
发出警告消息Can be replaced with 'Math.max' call
。
在这里我看到Math.max(a, b)
实际上与(a > b)? a: b
(a > b)? a: b
所以三元运算符不比Math.max
差
那么,如果通过Math.max
方法调用替换三元运算符没有优势,为什么Java
发出此警告消息?
我怀疑这是一个真正的编译器警告,可能是一些 IDE 检查/警告。
尽管如此,你是对的,没有硬性的技术理由来选择一个而不是另一个。
但是:从人类读者的角度来看,使用Math.max()
有一个主要优势:更容易阅读和理解。 就这么简单。
此外:除非必须,否则不要重复代码。
永远记住:您为人类读者编写代码。 编译器接受任何语法正确的东西。 但是对于您的人类读者来说,条件和分配与非常有说服力的“取两个数字的最大值”之间存在差异。
Math.max(a, b)
比 tenary 语句更具可读性,因为:
200
不需要重复。>
一般来说,三元更强大,因为它可以让你做这样的事情:
delay = (delay>200) ? 200 : delay;
delay = (delay<200) ? delay : 200;
delay = (delay>200) ? delay: 300;
您的代码的读者需要了解您实际在做什么。 解析它并理解它是一个简单的max()
需要时间。
max
更清楚地显示了您的意图。
除了现有答案之外,如果下限(在您的情况下为 200)不是常数而是派生值,则可能会带来性能优势:
delay = (delay > readLimitFromFile()) ? delay : readLimitFromFile();
当一个操作就足够时,这最终可能会执行 2 次昂贵的磁盘读取操作。 使用 Math.max:
delay = Math.max(delay, readLimitFromFile());
将只使用一次磁盘读取操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.