![](/img/trans.png)
[英]Rubocop: Assignment Branch Condition size for method is too high. How can I reduce the method?
[英]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.