如何使用||减少“过于复杂” -或运算符

时间:2018-11-22 08:54:11

标签: ruby-on-rails cyclomatic-complexity

我有一个简单的方法,可以计算大学课程表中该部门其他模块的总上课时间(学生可以参加多个部门)

 def hours_total
    @hours_total = user.open_departments.each_with_object({}) do |department, h|
      h[department] = (sports_hours[department] || 0) +
                    (science_hours[department] || 0) +
                    (intership_sum[department] || 0) +
                    (art[department] || 0) -
                    ((obligatory_topics[department] || 0) +
                    (base[department] || 0))
    end
  end

如何在Cyclomatic complexity for hours_total is too high.处解决?我不知道如何不重复|| 0,因为在某些部门,sports_hours[department]可能是nil的价值

1 个答案:

答案 0 :(得分:1)

我要采取的第一步:

def hours_total
  @hours_total = user.open_departments.each_with_object({}) do |department, h|
    positive = [sport_hours, science_hours, internship_sum, art].sum do |pos_h|
                 pos_h[department].to_i
               end

    negative = [obligatory_topics, base].sum do |neg_h|
                 neg_h[department].to_i
               end

    h[department] = positive - negative
  end
end

注意:如果您的时间可以是浮点值,请用to_i替换to_f

现在,如果您和Rubocop对此表示满意,我可能会保留。如果您不满意,应将positivenegative提取到方法中。