Ruby 三元运算符 if else

Ruby ternary operator if else

你会怎么做这个三元组?

if @user.skill.present?
    @skill = @user.skill
else
    @skill = Skill.new
end 

你可以试试

@user.skill.present? ? @skill = @user.skill :  @skill = Skill.new
@skill = @user.skill.present? ? @user.skill : Skill.new

作为两行代码可能更具可读性

@skill = @user.skill
if @skill.blank? @skill = Skill.new

我会使用:

@skill = @user.skill.present? ? @user.skill : Skill.new

然而,terry 语句通常不是 readability/maintainability 的改进。它们也不会提高处理速度。而且它们在某些 Ruby 代码商店和编码风格中不受欢迎,因为它们太容易 abused/misused.

在这种情况下使用 if/else 是完全合适的,所以不要害怕走那条路。考虑一下:如果您使用三元运算符编写逻辑,并且需要对返回值添加额外的处理,那么无论如何您都必须切换到使用常规 if/else 处理,否则您将生成一些看起来很糟糕的代码,这会降低其可读性。

@skill = @user.skill || Skill.new

如果@user.skill的值为nil,它将把下一个值(Skill.new)赋值给@skill。