# can't use newline as delimiter, need keywords
puts if (val == 1) then '1' else 'Not 1' end
# can use newline as delimiter
puts if (val == 1)
'1'
else
'Not 1'
end
if some_thing? ||
(some_other_thing? && this_thing_too?) ||
or_even_this_thing_right_here?
then
some_record.do_something_awesome!
end
我发现它比这些(完全有效的)选项更具可读性:
if some_thing? || (some_other_thing? && this_thing_too?) || or_even_this_thing_right_here?
some_record.do_something_awesome!
end
# or
if some_thing? ||
(some_other_thing? && this_thing_too?) ||
or_even_this_thing_right_here?
some_record.do_something_awesome!
end
5条答案
按热度按时间u0sqgete1#
then
是一个帮助Ruby识别表达式的条件和true部分的函数。if
条件then
真部else
假部end
then
是可选的除非你想在一行中写一个if
表达式。对于跨多行的if-else-end,换行符充当分隔符,将条件语句与true部分分开gmxoilav2#
这里有一个与你的问题没有直接关系的快速提示:在Ruby中,没有
if
语句。事实上,在Ruby中,根本没有语句。“一切”都是一种表达。if
表达式返回在所采用的分支中计算的最后一个表达式的值。所以,没有必要写
这最好写成
或者作为一个一行程序
在您的示例中:
注意:Ruby也有一个三元运算符(
condition ? then_branch : else_branch
),但这是完全不必要的,应该避免。在C语言中需要三元运算符的唯一原因是因为在C中if
是一个语句,因此不能返回值。您需要三元运算符,因为它是一个表达式,并且是从条件返回值的唯一方法。但是在Ruby中,if
已经是一个表达式,所以真的不需要三元运算符。bybem2ql3#
then
仅在您希望将if
表达式写入一行时才需要:括号在你的例子中并不重要,你可以在任何一种情况下跳过它们。
详情请参阅《十字镐书》。
gdrx4gfi4#
我唯一喜欢在多行
if/else
上使用then
的时候(是的,我知道这不是必需的)是当if
有多个条件时,如下所示:我发现它比这些(完全有效的)选项更具可读性:
因为它提供了
if
的条件与条件为“truthy”时要执行的块之间的可视描述。e5nqia275#
完全没有区别。
而且,仅供参考,您的代码可以优化,