【问题标题】:Is it possible to use the ternary operator for an if, if else, without a final else?是否可以将三元运算符用于if,if else,而不使用final else?
【发布时间】:2021-07-03 03:34:01
【问题描述】:

我最近了解到三元运算符,这似乎是清理我的代码的有效方法。但是,我似乎对它的可能性感到困惑。

我知道你不能将它用于 if-only 条件,但我对我所做的逻辑有点困惑。

这是我写的:

if(current_slide < 1){
    current_slide = 1;
    ToggleEnabled(next_button);
}else if(current_slide > total_slides){
    current_slide = 1;
    ToggleEnabled(prev_button);
}

不管怎样,它都有效。我想把它清理一下,所以我做了这个:

    current_side < 1 ? (ToggleEnabled(next_button), current_slide = 1) : current_slide > total_slides ? (ToggleEnabled(prev_button), current_slide = 1) : [No clue what to put here];

有没有更好的方法以更整洁的方式执行此操作,还是我应该继续使用 if-elseif- ?

【问题讨论】:

  • 我最近了解到三元运算符,这似乎是清理我的代码的有效方法”我会立即对您的来源表示怀疑。
  • 您可以使用&amp;&amp; 进行短路,但是您的第一个代码块在 imo 中更具可读性,更小并不总是让事情变得更干净
  • 我必须道歉,我看错了第一句话。我想有人告诉你使用条件运算符来清理你的代码。事实并非如此。所以,相反,我只是把我的怀疑集中在“清理”部分。 很少种情况下条件运算符更容易阅读和理解。或者更确切地说,这些案例本身并不少——你可以有效地使用它很多次。只是它经常被误用

标签: javascript conditional-operator


【解决方案1】:

在我看来,三元运算符不应该被链接。正如@VLAZ 在他们的评论中表达的他们的担忧,如果你把它串起来,三元可能会变得非常难以阅读。在这种情况下,我会坚持使用传统的if-else

看看以下内容:

if (condition1) {
  // do stuff #1
} else if (condition2) {
  // do stuff #2
} else if (condition3) {
  // do stuff #3
} else {
  // do stuff #4
}

并将可读性与三进制中的相同(我试图清楚地缩进,但链式三进制格式是见仁见智):

condition1
? // do stuff #1
: condition2
  ? // do stuff #2
  : condition3
    ? // do stuff #3
    : // do stuff #4

在我看来,第一个选项更具可读性。即使您非常了解链式三元组也没有什么收获,因为它比传统的if-else 效率(略)低。

另外值得注意的是,三元总是需要?:,这意味着你必须处理一个“最终的else”。

【讨论】:

    【解决方案2】:

    IMO,三元运算符旨在根据条件在答案或值之间进行选择,例如:

    const x = condition1 ? 1 : 2;
    return condition2 ? func1(x) : func2(x);
    

    如果您不使用三元表达式的结果值(如您所做的那样),那么我会高度怀疑这种用法,我很可能会要求在代码审查中对其进行更改。如果您将分配部分移动到 BEHIND ?: 选择器,则更是如此。

    并非所有可能的事情都是好的风格、好的做法或被推荐的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-27
      • 2017-03-25
      • 1970-01-01
      • 2014-06-16
      • 2013-10-09
      • 2010-12-12
      • 2021-01-03
      • 1970-01-01
      相关资源
      最近更新 更多