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多行三元表达式?的主要内容,如果未能解决你的问题,请参考以下文章