簡體   English   中英

Rubocop 錯誤:function 的分配分支條件大小過高。 我怎樣才能減少這個?

[英]Rubocop error: Assignment Branch Condition size for a function is too high. How can I decrease this?

1.我剛開始研究 ruby 並開始使用 Rubocop 來遵循一般的 ruby 指南,但我遇到了分配分支條件錯誤,有人可以幫我解決這個問題嗎?

@months = [{ 1 => '一月' }, { 2 => '二月' }, { 3 => '三月' }, { 4 => '四月' }, { 5 => '五月' }, { 6 => '六月' },{ 7 => '七月' }, { 8 => '八月' }, { 9 => '九月' }, { 10 => '十月' }, { 11 => '十一月' }, { 12 => '十二月' }]

   def calc_high_low_temp_of_month(date, address)

      high_temp_of_month = []
      min_temp_of_month = []
      max_humid_of_month = []

      @data_exists = false
      year, month = date.split('/')
      month = month.to_i
      month_hash = @months.detect { |x| x[month] }
      month = month_hash[month]
      begin
        arr = Dir.children(address)
      rescue Errno::ENOENT
        puts 'file not found!!!'
        return ''
      end
      arr.each do |elem|
         next unless elem.include?(year.to_s) && elem.include?(month.to_s)

        file_data = []
        File.foreach("#{address}/#{elem}") do |line|
          unless line.strip.empty?
            file_data.push(line)
            @data_exists = true
          end
        end

        splited_data = []
        splited_data = file_data[0].split ','
        index_of_high_temp = splited_data.find_index('Max TemperatureC')
        index_of_min_temp = splited_data.find_index('Min TemperatureC')
        index_of_humidity = splited_data.find_index('Max Humidity')

        (1...file_data.count).each do |index|
          splited_data = file_data[index].split ','
          if index_of_high_temp <= (splited_data.count - 1) && !splited_data[index_of_high_temp].empty?
            high_temp_of_month.push(splited_data[index_of_high_temp].to_i)
          end
          if index_of_min_temp <= (splited_data.count - 1) && !splited_data[index_of_min_temp].empty?
            min_temp_of_month.push(splited_data[index_of_min_temp].to_i)
          end
          next unless index_of_humidity <= (splited_data.count - 1)

          max_humid_of_month.push(splited_data[index_of_humidity].to_i) unless splited_data[index_of_humidity].empty?
        end
      end
      if @data_exists
        min_max_temp_of_month_hash = {}
        min_max_temp_of_month_hash['highTempOfMonth'] = high_temp_of_month
        min_max_temp_of_month_hash['minTempOfMonth'] = min_temp_of_month
        min_max_temp_of_month_hash['maxHumidOfMonth'] = max_humid_of_month
        min_max_temp_of_month_hash
      else
        ''
      end
    end

顧名思義,分配、分支和條件指標(ABC) 計算分配分支條件

如果你有太多的任務、分支和條件,那么解決這個問題的方法是減少至少一個的數量

  • 作業,
  • 分支機構,或
  • 情況。

舉個例子:

這里:

splited_data = []
splited_data = file_data[0].split ','

您分配splited_data然后立即覆蓋該分配,中間不做任何其他事情。 這意味着第一個賦值完全沒用,它什么都不做,你可以只寫

splited_data = file_data[0].split ','

反而。

另一個例子:

min_max_temp_of_month_hash = {}
min_max_temp_of_month_hash['highTempOfMonth'] = high_temp_of_month
min_max_temp_of_month_hash['minTempOfMonth'] = min_temp_of_month
min_max_temp_of_month_hash['maxHumidOfMonth'] = max_humid_of_month

這 4 個作業可以很容易地寫成根本沒有作業:

{
  'highTempOfMonth' => high_temp_of_month,
  'minTempOfMonth' => min_temp_of_month,
  'maxHumidOfMonth' => max_humid_of_month
}

很難給出好的建議,因為您的代碼非常復雜和令人費解。 最好的方法是將代碼分解為多個單獨的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM