关于单语句是否应该使用花括号,存在激烈的争论。
在 C++、C#、Java 和 Javascript 中,不使用花括号的单行语句是有效的。有些人利用这个特性,而有些人则不这样做。
例如
if(ifTrue)
MowTheLawn();
for(var index; index > 10; index++)
ChopWood();
foreach(var dollar in money)
BuyLollipop();
while(untilTheEnd)
Read();
反对单行花括号的论点
反对花括号的论点是语法更简洁,需要输入的字符更少,而且这是有效的语法。为什么不利用这个特性呢?
支持单行花括号的论点
支持花括号的论点是保持一致性、减少错误和更容易理解。
在 Jon Abrams 撰写的题为 Single-line ‘if’ statements 的文章中,Jon 解释了 Apple 的 TLS 实现中的一个缺陷是如何由于没有花括号的单行 if 语句而引入的。Jon 进一步指出,虽然在单行语句中省略花括号可以使代码更简洁,但防止缺陷比简洁性更重要。
Jon 提出了一个折中方案,允许单行语句,但前提是它们确实在单行上:
if(ifTrue) MowTheLawn();
我赞同 Jon 的观点,在单行中省略花括号不值得它提供的好处。它迫使软件工程师考虑两种有效语法的变体。这似乎不是什么大问题,但每次遇到 if 语句时都要做出这种判断是很费力的。其后果是工程师节省了几次按键,但将负担转移给了未来的代码阅读者。
对于 C# 软件工程师,Microsoft 在他们的 编码约定 中已经表明了立场,要求使用花括号。
当我们在所有情况下都使用花括号,无论有多少行,什么在作用域内,什么在作用域外都非常清楚。这使代码更不容易出错,更加一致。虽然有些人可能会对此有异议,但我发现这样更容易阅读。
作者:Chuck Conway 是一位 AI 工程师,拥有近 30 年的软件工程经验。他构建实用的 AI 系统——内容管道、基础设施代理和解决实际问题的工具——并分享他沿途的学习成果。在社交媒体上与他联系:X (@chuckconway) 或访问他的 YouTube 和 SubStack。