我可以像这样重构吗?这些是等价的吗?因此更简单直接的代码版本是首选的吗?
在重构之前:
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())
发布于 2012-09-14 14:34:00
不,它们不是等价的。您必须在第二个选项之前添加!
。
fixed second选项肯定会更清晰:
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;
发布于 2012-09-14 14:35:44
实际上,不是。第一个仅当所有匹配器不匹配时才是true
。如果在第二个语句中所有匹配器都不匹配,则返回false
return !(matcher.matches() || matcher2.matches() || matcher3.matches()
|| matcher4.matches() || matcher5.matches()
|| matcher6.matches() || matcher7.matches()
|| matcher8.matches())
这是正确的
发布于 2012-09-14 20:41:33
不,它们不是等价的。把它简化一点,这样就更清楚了--我们只用两个例子,把它们变成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);
https://stackoverflow.com/questions/12419232
复制相似问题