0

我的办公室里出现了关于使用三元运算符的讨论。这个讨论有两个方面。

Side 1)三元运算符易于编写和阅读,因此方便是净成本节省。

Side 2)三元运算符难以维护,因为如果需要将它们修改为更复杂一点,它们就需要过多的代码搅动。

如果您可以引用顶级机构在该主题上所做的任何实际研究,那么书呆子会加分……我很想看到这方面的硬数据。


我的理论是最好的代码是可以轻松更改和适应的代码,并且更改所需的复杂性越低,中断的机会就越少。例子:

$id = $user->isRegistered() ? $user->id : null;

好的,所以这是完全有效的,但是当代码需要更改以变得更复杂时会发生什么?

$id = null;
if ($user->isRegistered() || $user->hasEmail()) {
    $id = $user->id;
}

任何理智的程序员都会查看三元并转换为标准 if/else。但是,这需要进行 4 行更改,而不是从以下开始:

if ($user->isRegistered()) {
    $id = $user->id;
}

这只需要 1 行更改。

4

4 回答 4

6

我发现一旦你习惯了语法,这两个选项都同样具有可读性(前提是你没有过度使用任何一个),所以这对我来说不是问题。

至于哪个更省时,我要回答一个令人讨厌的问题——你为什么在乎?任何一个选项都需要不到 20 秒的时间来转换为等效的 if 语句。

就我个人而言,我发现当我想方设法缩短编程时间时,这是一种拖延。当我专注于完成工作并让小的可读性细节通过经验自行解决时,我的工作效果最好。

于 2009-10-26T17:57:03.313 回答
3

在您的示例中,我会坚持使用三元运算符。

   $id = ($user->isRegistered() ||  $user->hasEmail())? $user->id : null;

只要唯一的“分支”是决定要为变量分配什么值,三元运算符就比 if-else 子句更具可读性,因为它不会潜在地复制正在执行的实际函数,(在这种情况下 -这是代码 "$id =") 如果逻辑条件变得复杂,请简化它们。

   bool $isReg    = $user->isRegistered(),
        $hasEmail = $user->hasEmail();
   $id = ($isReg || $hasEmail)?  $user->id : null;
于 2009-10-26T17:52:46.380 回答
1

每当我有一个值取决于适当的布尔条件的单行表达式时,我都喜欢使用三元运算符。实际上,如果我需要在分配给变量之间进行选择,并且我可以在表达式 1 和表达式 2 之间进行选择,那么我经常使用三元组。

但是,如果表达式有副作用,那么我将立即将整个内容重写为 if() 语句。使用三元运算符进行流量控制对大多数人来说是相当混乱的。

于 2009-10-26T17:59:21.000 回答
0

三元运算占有一席之地;在执行琐碎的任务时,通常是为了简化代码。但是,在某些时候,如果条件语句变得过于复杂,您可能需要重新考虑您的策略。它正在确定这一点何时成为挑战。只有经验才能指导你。

所以,只要最终结果是干净、可读和可维护的代码,我认为没有一个“正确”的答案。在做出此决定时,甚至不应该考虑语句的额外代码行if(因为代码行数不一定与代码的复杂性一一对应。)

于 2009-10-26T18:03:05.733 回答