如果将条件转换为除非如何?

时间:2017-09-14 16:38:36

标签: ruby

if array.present?
 puts "hello"
end

除此之外别无选择。

如何使用if撰写上述unless条件。

我问这个问题是因为这个lint错误:

  

使用保护子句而不是将代码包装在条件表达式

4 个答案:

答案 0 :(得分:1)

没有理由。

请注意:unlessthe inverse of if(如果您愿意,则为!if),并且只是为了让您的代码更容易进行阅读。

在您的表达中使用unless会非常尴尬,因为您现在正在将实际的工作内容移到else语句中......

unless array.present?
  return
else
  puts "hello"
end

...如果您坚持使用否定的if,那么您的代码就不会更容易阅读:

if !array.present?
  return
else
  puts "hello"
end

请勿在此处使用unless您将失去可读性以换取几乎所有内容。

答案 1 :(得分:1)

关于your comment

  

我因为这个lint错误而问这个问题

     
    

使用保护子句而不是将代码包装在条件表达式

中   

这意味着代替:

def foo(array)
  if array.present?
    puts "hello"
  end
end

你应该使用:

def foo(array)
  return unless array.present?
  puts "hello"
end

请参阅https://github.com/bbatsov/ruby-style-guide#no-nested-conditionals

如果这是一个Rails问题(is it?),您还可以使用blank?

def foo(array)
  return if array.blank?
  puts "hello"
end

答案 2 :(得分:0)

unless array.present?
  return
else
  puts "hello"
end

OP要求进行单线修改:

伪代码:

something unless condition

因此:

puts "hello" unless !array.present?

答案 3 :(得分:0)

一衬垫:

puts "hello" unless !array.present?

但是,我建议:

puts "hello" if array.present?