在长片段代码中正确格式化

时间:2013-03-01 06:50:45

标签: ruby formatting

如果我必须使用除非/ if和block,代码可能会变得非常长。这看起来并不好看,我的问题是如何处理这种情况,什么是正确的格式,例如在这个时髦的案例中?

if some_array.each.all? {|argument| argument.method_one == @some_value} && another_array.method_two == @completely_different_value

    #
    #some stuff here
    #

end

3 个答案:

答案 0 :(得分:1)

您可以将它分成几行。我认为这种格式更容易阅读

result1 = some_array.each.all? { |argument| argument.method_one == @some_value }
result2 = another_array.method_two == @completely_different_value
if result1 && result2
  #
  #some stuff here
  #
end

答案 1 :(得分:0)

有很多方法可以完成你的任务。

最常见的方法是在shell提示符中使用反斜杠:

if some_array.each.all? { |argument| \
    argument.method_one == @some_value \
  } \
  && another_array.method_two == @completely_different_value \

 puts a
end  

你也可以默默地在dot处断开这一行(必须在行中位于<&lt; 1.9或开头 ) >在Ruby 1.9 +中的下一行>。)

"foo bar baz".
  reverse.
  split.
  map(&:capitalize).
  join ' '
# ⇒ "Zab Rab Oof"

答案 2 :(得分:0)

我建议将零件提取到变量

condition1 = some_array.each.all? do |argument|
  argument.method_one == @some_value
end

condition2 = another_array.method_two == @completely_different_value

if condition1 && condition2
    #
    # some stuff here
    #
end

或将条件纳入方法

def condition1?(arr)
  arr.some_array.each.all? do |argument|
    argument.method_one == @some_value
  end
end

def condition2?(arr)
  arr.method_two == @completely_different_value
end

if condition1?(some_array) && condition2?(another_array)
    #
    # some stuff here
    #
end

提取到方法的优势在于您的代码通常更容易测试。