gpt4 book ai didi

coding-style - 将变量与文字进行比较时,应该将文字放在等于 '==' 运算符的左侧还是右侧?

转载 作者:行者123 更新时间:2023-12-04 16:50:40 25 4
gpt4 key购买 nike

在学习编码时,我在检查变量值时学会了以下风格:

int x;
Object *object;
...
if(x == 7) { ... }
if(object == NULL) { ... }

但是,现在我在这个领域,我遇到了不止一个同事发誓在 if 语句中切换 lhs 和 rhs 的方法:

if(7 == x) { ... }
if(NULL == object) { ... }

原因是如果您不小心输入了 = 而不是 ==,那么代码将在编译时失败。由于不习惯这种风格,阅读 7 == x 对我来说很困难,减慢了我对他们代码的理解。

看来如果我采用这种风格,将来的某一天我可能会避免调试 x = 7 错误,但与此同时,每次有人阅读我的代码时我可能浪费他们的时间,因为我担心语法不正统。

7 == x 样式是否在行业中被普遍接受和可读,或者这只是我同事的个人偏好?

最佳答案

The reasoning being that if you accidentally type = instead of ==, then the code will fail at compile.

没错。另一方面,我相信现代 C 和 C++ 编译器(我假设您使用的是其中一种语言?您还没说)会在您这样做时发出警告。

您是否尝试过使用您正在使用的编译器?如果默认情况下它不执行此操作,请查看是否有可用于激发它的标志 - 理想情况下使其成为一个错误,而不仅仅是一个警告。

例如,使用 Microsoft C 编译器,我得到:

cl /Wall Test.c
test.c(3) : warning C4706: assignment within conditional expression

这很清楚,IMO。 (诚​​然,默认 警告设置不会发现它。)

Being unaccustomed to this style, reading 7 == x is difficult for me, slowing my comprehension of their code.

的确如此。你的方法是更自然的风格,应该(IMO)被使用,除非你真的处理一个没有发现这是一个潜在问题的编译器(你别无选择,只能使用它编译器)。

编辑:请注意,这不是所有语言的问题 - 甚至不是所有类 C 语言。

例如,尽管 Java 和 C# 都有类似的 if 结构,但两者的条件表达式都需要隐式转换为 bool 值。虽然赋值部分可以编译,但第一个示例中的表达式类型将是 int,它不能隐式转换为任何一种语言中的相关 bool 类型,从而导致编译时错误。您仍然遇到问题的罕见情况是:

if (foo == true)

如果打错了:

if (foo = true)

会编译并做错事。 MS C# 编译器甚至会就此警告您,尽管通常最好只使用

if (foo)

if (!foo)

尽可能。剩下的就是:

if (x == MethodReturningBool())

对比

if (MethodReturningBool() == x)

这仍然非常罕见,并且在 MS C# 编译器(可能在某些 Java 编译器中)中仍然有针对它的警告。

关于coding-style - 将变量与文字进行比较时,应该将文字放在等于 '==' 运算符的左侧还是右侧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11977224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com