Ruby多行三元表达式?

Posted

技术标签:

【中文标题】Ruby多行三元表达式?【英文标题】:Ruby multiline ternary expression? 【发布时间】: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 您是否考虑过将这些神秘的“表达式”放在单独的方法中?那么三元组可能会更清晰,您不需要重载标点符号。 采用长代码表达式并将它们压缩为短表达式是好的。采用长代码表达式并将它们压缩成一行长代码并不是一个好主意。它使代码难以阅读。一开始你可能感觉很好,但你以后只会讨厌自己。 【参考方案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。

【讨论】:

以上是关于Ruby多行三元表达式?的主要内容,如果未能解决你的问题,请参考以下文章

带有“已定义?”的三元表达式返回“表达式”而不是值?

为啥 Kotlin 不支持“三元运算符”[关闭]

FizzBu​​zz 使用三元条件运算符

三元表达式是啥?

三元表达式

C#中的三元表达式