使用逗号来防止需要支撑对
有时,当我有一个多案例if
或非常简单for
只有两个陈述时,我会放弃大括号,而不是使用逗号。 这是对该function的糟糕利用,是不是丑陋和糟糕的forms? 或者这是节省时间和空间的可接受方式?
例如:
if (something) b = y, c = z--;
代替:
if (something) { b = y; c = z--; }
这确实是一种使用大多数类C语言的语法特征的聪明方法。
就个人而言,我在编码时尽量保持最不模糊 ,所以我总是在所有if
语句中包含{
和}
。 它可以节省时间,但我更喜欢清晰 :它不会加速或减慢代码执行速度 。
我投票反对它有几个原因:
- 很难立即看到,有一个以上的任务。
- 我赞成总是使用括号,因为有时可以方便地返回,例如在调试期间,并添加也在该块中执行的代码。
- 它并没有真正节省很多。 编译器将吐出相同的代码。 它不会为您节省任何明显的编译时间。 分发文件时,它不会显着更好地压缩。
-
它不会节省超过几分钟的打字时间。
-
如果你真的需要在屏幕上节省太多空间,你需要一个更大的屏幕(或者你应该运行一个更大的终端窗口)。
-
它对生成的目标代码没有任何影响。 因此,它对运行时没有影响。
-
在调试器中单步执行逗号表达式的组件语句更加困难。
我认为更容易阅读冒号分隔(因此’支撑’)代码,而不是更难以键入支撑版本。 (经过很长一段时间,我一直用C语言编写并使用大括号,我不得不考虑使用逗号表示法。)
我认为这是非常好的风格,但我相信其他人会不同意。
逗号运算符的一个特定变体用法是在for
语句的部分内,如:
for (i=0, j=1; i
当您不能使用大括号时,逗号forms更有用:
#define MY_ASSERT(expr) ((expr) || (debugbreak(), 0))
这里debugbreak()
返回void
,但我们仍然希望将0
作为右值。
代码阅读器必须查看/检查语言核心细节越多,代码的可读性就越少。 在这种情况下,有两个不同的指令,因此在我看来,括号的使用是显而易见的。
关于什么
a = b, c;
要么
a = b, c ? d, e : f, g;
代码阅读器(大多数)不习惯该语法,可能需要检查优先级以确保将分配哪个值。
我们希望有人阅读源代码,专注于代码逻辑,而不是语法。
我从未使用过逗号语法。 但这是因为我不知道它存在,说实话。
如果我知道它,那么我会愉快地使用它代替恼人的牙箍,只需要两三个陈述。
所以在我看来,随意使用! 只要你不犯这个经典错误:
if (cond) doSomething(); doSomethingElse(); // <-- oops, unconditional statement!