首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这些语句是等价的吗?

这些语句是等价的吗?
EN

Stack Overflow用户
提问于 2012-09-14 14:32:24
回答 3查看 81关注 0票数 4

我可以像这样重构吗?这些是等价的吗?因此更简单直接的代码版本是首选的吗?

在重构之前:

代码语言:javascript
运行
复制
    if (!matcher.matches() && !matcher2.matches() && !matcher3.matches()
            && !matcher4.matches() && !matcher5.matches()
            && !matcher6.matches() && !matcher7.matches()
            && !matcher8.matches()) {
        return true;
    } else
        return false;

重构后:

代码语言:javascript
运行
复制
    return (matcher.matches() || matcher2.matches() || matcher3.matches()
            || matcher4.matches() || matcher5.matches()
            || matcher6.matches() || matcher7.matches()
            || matcher8.matches()) 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-14 14:34:00

不,它们不是等价的。您必须在第二个选项之前添加!

fixed second选项肯定会更清晰:

代码语言:javascript
运行
复制
return !(matcher.matches() || matcher2.matches() || matcher3.matches()
            || matcher4.matches() || matcher5.matches()
            || matcher6.matches() || matcher7.matches()
            || matcher8.matches()) 

我也会这样重构它:

代码语言:javascript
运行
复制
boolean atLeastOneMatch = matcher.matches() || matcher2.matches() || matcher3.matches()
                || matcher4.matches() || matcher5.matches()
                || matcher6.matches() || matcher7.matches()
                || matcher8.matches();

return !atLeastOneMatch;
票数 2
EN

Stack Overflow用户

发布于 2012-09-14 14:35:44

实际上,不是。第一个仅当所有匹配器不匹配时才是true。如果在第二个语句中所有匹配器都不匹配,则返回false

代码语言:javascript
运行
复制
return !(matcher.matches() || matcher2.matches() || matcher3.matches()
            || matcher4.matches() || matcher5.matches()
            || matcher6.matches() || matcher7.matches()
            || matcher8.matches()) 

这是正确的

票数 6
EN

Stack Overflow用户

发布于 2012-09-14 20:41:33

不,它们不是等价的。把它简化一点,这样就更清楚了--我们只用两个例子,把它们变成x和y而不是"matcherX.matches()“。在这种情况下,你会问:

这两个是等价的吗?

代码语言:javascript
运行
复制
if (!x && !y) {
        return true;
    } else
        return false;

代码语言:javascript
运行
复制
return (x || y);

让我们轻松地进入它。首先,初始语句可以清楚地直接转换为

代码语言:javascript
运行
复制
return (!x && !y);

下面是实现该功能的Truth Table

代码语言:javascript
运行
复制
|    x    |    y    |  !x && !y  |
+---------+---------+------------+
|    T    |    T    |     F      |
|    T    |    F    |     F      |
|    F    |    T    |     F      |
|    F    |    F    |     T      |

也就是说,仅当子表达式中没有一个为真时,第一个表达式才返回true。这是相同的

代码语言:javascript
运行
复制
return !(x || y);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12419232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档