首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >if-else语句中的“等于”与“不等于”运算符

if-else语句中的“等于”与“不等于”运算符
EN

Stack Overflow用户
提问于 2016-10-14 14:14:44
回答 4查看 24K关注 0票数 20

当用C编写if-else语句时,当两者都能产生相同的结果时,有没有理由优先使用操作符“等于”而不是“不等于”?

下面的代码提供了上下文。由此,如果参数计数等于2,则将从用户检索字符串。但是,如果获得任何其他参数值,则会出现一条错误消息。

代码语言:javascript
复制
int main(int argc, string argv[])
{
    string msg;

    if (argc == 2) 
    {
        msg = GetString();
    }
    else
    {
        printf("ERROR: Please only enter a single key! \n");
        return 1;
    }

但是,我可以通过将if-else循环的条件更改为"not equals to",并翻转相关的操作,来实现与上面完全相同的结果。如下所示:

代码语言:javascript
复制
int main(int argc, string argv[])
{
    string msg;

    if (argc != 2) 
    {
        printf("ERROR: Please only enter a single key! \n");
        return 1;
    }
    else
    {
        msg = GetString();
    }

无论如何,当两者产生相同的结果时,是否应该优先使用其中一个?

EN

回答 4

Stack Overflow用户

发布于 2016-10-14 14:17:54

这只是一个编码风格的问题。我讨厌嵌套主要逻辑,我将它写成:

代码语言:javascript
复制
int main(int argc, string argv[])
{
    if (argc != 2) 
    {
        printf("ERROR: Please only enter a single key! \n");
        return 1;
    }

    string msg = GetString();
}

顺便说一下:main的签名值应该是int main(int argc, char *argv[])

票数 12
EN

Stack Overflow用户

发布于 2016-10-14 14:18:04

我通常更喜欢“等于”,因为它使代码对人类来说更“可读”。它使代码变得更简单。与其说它是一个“规则”,不如说它是一个“很好的编码指南”,因为它根本不会影响运行时(它是我以前公司的编码指南的一部分)。

请检查以下内容:

代码语言:javascript
复制
if ( !isEmpty() )

比起你写的,你的大脑要多花几毫秒的时间来理解测试的作用:

代码语言:javascript
复制
if ( isEmpty() )

即使它对运行时没有影响,我通常更喜欢“等于”而不是“不等于”。

同样的参数也适用于变量和函数名。与isNotSet相比,更喜欢isSet属性/方法。阅读像if ( !isNotSet() )这样的代码比阅读if ( isSet() )更容易,即使它们最终是等价的。

如果您使用的是您无法控制的代码,并且此代码提供了一个回答否定问题的成员,则:

代码语言:javascript
复制
if ( isNotSet() )

对于开发人员来说绝对比以下代码更容易阅读:

代码语言:javascript
复制
if ( !isNotSet() )
票数 5
EN

Stack Overflow用户

发布于 2016-10-14 14:29:42

正如其他人所说,这是一个风格问题。这并没有真正的区别。

不过,有一件事需要牢记,那就是努力保持一致。如果你有一个块检查If value1 == 2,试着不让下一个块检查value2 != 4。唯一不好的风格是不一致的风格。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40036165

复制
相关文章

相似问题

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