【问题标题】:Can I use nested statements without curly brackets?我可以使用没有大括号的嵌套语句吗?
【发布时间】:2023-03-16 10:33:01
【问题描述】:

虽然在 PHP 手册中没有找到“foreachelse”,但我想出了自己的。

您会说以下推荐吗? 我是紧凑代码的粉丝,我认为它具有良好的可读性。 而且它还有效。

$consequences = array("You ", "will ", "burn ", "for ", "this!");

if(!empty($consequences)) foreach($consequences as $consequence) { 
    // 100 lines of code to be inserted here
    echo $consequence;
} else echo "No consequences";

在测试这个之前,我实际上认为我不能在“无花括号语句”中使用花括号,但看起来你可以。

在这种情况下使用花括号有什么论据吗?

【问题讨论】:

  • 完全不推荐。这是一个难以理解的混乱。
  • 您认为易于阅读的内容,其他人可能不同意。除非它影响性能,否则要冗长,并将压缩留给代码压缩器。解释器不关心你的约定(如果代码在语法上是正确的,它会运行它而不看它是否漂亮)。如果您需要编写其他人需要与您同时阅读、维护或工作的代码,那么这种习惯会让您很难完成这项工作。

标签: php statements


【解决方案1】:

虽然对您来说这可能是紧凑而整洁的,但它不遵循关于如何编写这些内容的约定。您的代码将很难被其他开发人员阅读。虽然没有关于如何编写代码的绝对“标准”,但世界上很大一部分人都采用了几种约定。

一行if (something) do; 语句是邪恶的,即使你不需要使用花括号,也将它分成两行:

if (something)
  do;

这不仅更易于阅读,而且使调试更容易,因为如果正在使用调试器,可以在“do”行上放置一个断点,或者如果单步执行代码,则表达式的计算结果是否为真将很清楚.

在你的情况下,这将变成:

if(!empty($consequences))
  foreach($consequences as $consequence) { 
    // 100 lines of code to be inserted here
    echo $consequence;
  }
else
  echo "No consequences";

虽然这不像您所说的那样“紧凑”,但它是可维护的,并且很容易看到代码路径,这是您编写清晰的代码时的主要目标,以后易于调试。

还要注意,由于 PHP5.4,PHP 中不再需要 array 关键字,您可以使用以下内容:

$consequences = ["You ", "will ", "burn ", "for ", "this!"];

这不仅更“紧凑”,而且与 C 等其他语言更标准内联,因此非常易读。

简而言之,如果您不愿意调整您对什么是“整洁”代码的看法,那么您将在这个行业中挣扎。别人很难和你一起工作,你也很难看懂别人写的代码。

【讨论】:

  • 那么,在您看来,onelineif(something) do; 的使用是这里的邪恶,而不是省略的花括号?或者您会建议在我的情况下使用大括号吗?
  • @OnklMaps 由你决定你想使用什么编码风格,在这个简单的例子中我个人不会使用它们,但这是我个人的偏好,其他开发人员会坚持他们的用法。但是,您需要做的是确保使用新行和缩进使代码路径清晰。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多