我在MongoDB 的 Java Connection driver 的这个提交中看到了以下代码,起初它似乎是某种玩笑。下面的代码有什么作用?
if (!((_ok) ? true : (Math.random() > 0.1))) { return res; }
(编辑:自发布此问题以来,代码已更新)
在检查了该行的历史之后,我的主要结论是工作中存在一些不称职的编程。
a? true : b
forboolean a, b等价于简单的
boolean a, b
a || b
周围的否定和过多的括号使事情进一步复杂化。记住德摩根定律,这是一个微不足道的观察,这段代码相当于
if (!_ok && Math.random() <= 0.1)
return res;
最初引入这个逻辑的提交有
if (_ok == true) {
_logger.log( Level.WARNING , “Server seen down: ” + _addr, e ); } else if (Math.random() < 0.1) { _logger.log( Level.WARNING , “Server seen down: ” + _addr ); }
‘ 另一个不称职的编码示例,但请注意 相反的逻辑 :此处,如果有任何一种情况_ok或在 10% 的其他情况下,则记录事件,而 2. 中的代码 返回 10% 的时间并记录 90% 的时间。所以后来的提交不仅破坏了清晰度,而且破坏了正确性本身。
_ok
我认为在您发布的代码中,我们实际上可以看到作者打算如何将原件以某种方式从字面上转换为早期条件if- then所需的否定。return但后来他搞砸了,通过反转不等号插入了一个有效的“双重否定”。
if- then
return
我只能希望所有这些从 仅检查三行代码 中积累的无能证据并不能公平地说明整个项目,并且这项工作将尽快得到清理。