Как уменьшить «слишком высокую сложность» с помощью ||- или оператор - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть простой метод, который подсчитывает общее количество часов урока в расписании университета для дополнительных модулей на кафедре (студент может посещать многие кафедры)

 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 голосов
/ 22 ноября 2018

Первый шаг, который я бы предпринял:

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.

Теперь, если вы и ваш Рубокоп в порядке с этим, я, вероятно, оставлю это.Если кто-то из вас несчастлив, то positive и negative должны быть извлечены в метод.

...