使用逗号来防止需要支撑对

有时,当我有一个多案例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!