【问题标题】:Ruby multiline ternary expression?Ruby多行三元表达式?
【发布时间】:2015-03-14 05:03:49
【问题描述】:

我正在尝试转换如下内容:

if condition?
   expression1 line 1
   expression1 line 2
   expression1 line 3
else 
   expression2 line 1
end

对于三元,我的问题是:如何将多行放入一个表达式中的一行?你像java中那样用分号分隔吗? 像这样?

condition? expression1 line 1; expression1 line 2; expression1 line 3 : expression2

【问题讨论】:

  • 这对于以后阅读代码的其他人来说会非常不清楚 - 是否有理由必须是三元组?
  • 为什么你认为在这种情况下三元运算符更好?
  • 似乎是时候考虑使用另一种结构,如 if/else
  • 您是否考虑过将这些神秘的“表达式”放在单独的方法中?那么三元组可能会更清晰,您不需要重载标点符号。
  • 采用长代码表达式并将它们压缩为短表达式是好的。采用长代码表达式并将它们压缩成一行长代码并不是一个好主意。它使代码难以阅读。一开始你可能感觉很好,但你以后只会讨厌自己。

标签: ruby ternary-operator


【解决方案1】:
在 Ruby 中,总是可以用分号替换换行符,所以事实上,您可以将整个程序写在一个长长的大行中。无论这是否有利于可读性和可维护性,我都将由您决定。 (注意:在优先级不匹配的情况下,有时必须插入括号进行分组。)以下是如何在一行中编写条件表达式:如果条件?然后表达式 1 第 1 行;表达式1第2行;表达式 1 第 3 行 else 表达式 2 第 1 行结束

【讨论】:

    【解决方案2】:

    您应该将表达式括在括号中:

    condition ? (expression1 line 1; expression1 line 2; expression1 line 3) : expression2
    

    您应该记住,这会降低代码的可读性。您最好使用if/else 语句来提高可读性。在查看我的ruby 代码时,我喜欢使用的一种资源是community style guide。正如它在介绍性段落中所说:

    本 Ruby 风格指南推荐最佳实践,以便在现实世界中 Ruby 程序员可以编写可以由其他人维护的代码 现实世界的 Ruby 程序员。

    希望对你有帮助

    【讨论】:

    • 虽然它符合将所有内容放在一条线上的目标,但它破坏了更重要的可读性和可维护性。节省空间以牺牲其他人是在代码审查中度过糟糕一天的必经之路。
    • @theTinMan 同意了。我更喜欢if/else 声明。
    • 在答案中这么说。给出一个可行但不是正确方法的解决方案并不是一个很好的答案,因为它传播了这样一种假设,即这是一种很好的做法。相反,指出正确的方法是可以的。我是这样想的:我是否希望我团队中的某个人编写这样的代码,可能必须维护?
    【解决方案3】:

    你可以用多行表示三进制:

    condition ?
      expression 1 :
      expression 2
    

    是的,您需要在多个表达式中使用分号(括号不会造成伤害)。

    请不要这样做。坚持if 声明。

    【讨论】:

      【解决方案4】:

      三元运算符需要单个指令块。这意味着您可以使用括号对指令进行分组

      condition = true
      condition ? (puts("this"); puts("is"); puts("true")) : puts("this is false")
      

      或在开始/结束块中。

      condition = true
      condition ? begin puts("this"); puts("is"); puts("true") end : puts("this is false")
      

      事实上,没有简单、干净的方法来实现结果,这应该告诉你三元运算符并不是真正为多语句设计的。 ;)

      在这种情况下不要尝试使用它。使用标准 if/else。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-22
        • 2017-12-24
        • 2015-10-07
        • 2013-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-25
        相关资源
        最近更新 更多