我可以像这样重构,这些是等价的,因此更简单直接的代码版本是首选吗?
重构之前:
if (!matcher.matches() && !matcher2.matches() && !matcher3.matches()
&& !matcher4.matches() && !matcher5.matches()
&& !matcher6.matches() && !matcher7.matches()
&& !matcher8.matches()) {
return true;
} else
return false;
重构后:
return (matcher.matches() || matcher2.matches() || matcher3.matches()
|| matcher4.matches() || matcher5.matches()
|| matcher6.matches() || matcher7.matches()
|| matcher8.matches())
答案 0 :(得分:6)
实际上,没有。只有当所有匹配器不匹配时,第一个才是true
。如果所有匹配器在第二个语句中不匹配,则返回false
return !(matcher.matches() || matcher2.matches() || matcher3.matches()
|| matcher4.matches() || matcher5.matches()
|| matcher6.matches() || matcher7.matches()
|| matcher8.matches())
这是正确的
答案 1 :(得分:2)
不,他们不等同。您必须在第二个选项前面添加!
。
固定的第二个选项更加明确:
return !(matcher.matches() || matcher2.matches() || matcher3.matches()
|| matcher4.matches() || matcher5.matches()
|| matcher6.matches() || matcher7.matches()
|| matcher8.matches())
我也会这样重构:
boolean atLeastOneMatch = matcher.matches() || matcher2.matches() || matcher3.matches()
|| matcher4.matches() || matcher5.matches()
|| matcher6.matches() || matcher7.matches()
|| matcher8.matches();
return !atLeastOneMatch;
答案 2 :(得分:0)
不,这些不等同。稍微削减它以便更清楚 - 让我们只使用2个示例,并将它们设为x和y而不是“matcherX.matches()”。在那种情况下,你问:
这两个是等价的吗?
if (!x && !y) {
return true;
} else
return false;
和
return (x || y);
让我们轻松进入它。首先,初始陈述可以直接转换为
return (!x && !y);
以下是Truth Table:
| x | y | !x && !y |
+---------+---------+------------+
| T | T | F |
| T | F | F |
| F | T | F |
| F | F | T |
也就是说,只有当没有子表达式为真时,第一个表达式才返回true
。这与
return !(x || y);