当前位置:  开发笔记 > 后端 > 正文

"索引的分配条件大小是否过高"如何工作?

如何解决《"索引的分配条件大小是否过高"如何工作?》经验,为你挑选了1个好方法。

Rubocop总是报告错误:

app/controllers/account_controller.rb:5:3:C:赋值分支索引的条件大小太高.[30.95/24]

if params[:role]
  @users = @search.result.where(:role => params[:role])
elsif params[:q] && params[:q][:s].include?('count')
  @users = @search.result.order(params[:q][:s])
else
  @users = @search.result
end

怎么解决?谁有好主意?



1> New Alexandr..:

的ABC尺寸[1] [2]

通过计算一段代码的赋值,分支和条件的数量来计算.原始C++ Report文章中的计数规则专门针对C,C++和Java语言.

之前的链接详细说明了A,B和C的重要性.ABC大小是一个标量大小,让人联想到三角关系:

|ABC| = sqrt((A*A)+(B*B)+(C*C))

实际上,关于错误的快速谷歌显示第一个索引页面是呈现该消息的方法的Rubocop文档.

您的回购或分析工具将在触发警告时定义阈值金额.

计算,如果你喜欢自我造成....

您的代码计算为

(1+1+1)^2  + 
(1+1+1+1+1+1+1+1+1+1+1+1+1)^2   + 
(1+1+1+1)^2 
=> 194 

这是一个'盲目'的计算,用我已经组成的值1.但是,您可以看到错误表示现在可能作为ABC和阈值的数字:

 [30.95/24]

所以警察门槛24和你的ABC sizeIS 30.95.这告诉我们rubocop引擎为A,B和C分配不同的数字.同样,不同种类或赋值(或B或C)也可以具有不同的值.EG"正常"作业x = y的得分可能低于链接作业x = y = z = r.

tl;博士回答

此时,您可能对如何减小ABC大小有一个相当清楚的想法.如果不:

    一种简单的方法,它采取用于您的条件elsif并将其放在辅助方法中.

    因为你正在分配一个@变量,并且主要是从一个变量调用,所以你的代码不使用内存封装.因此,您可以移动它们if并将elsif操作阻止到它们自己load_search_users_by_roleload_search_users_by_order方法中.


不,那不是*惯例.惯例是if和*只有*有*两个*方法做同样的事情,那么更令人惊讶的方法是用爆炸命名.这与变异没什么关系*(参见例如`save`与`save!`在ActiveRecord中或`exit`与`exit!`在Ruby中)并且**仅在*有***方法时适用(例如,参见`Array`或`String`或`Hash`中的十几个方法来修改接收器,但没有爆炸.)如果还有一个非爆炸方法,那么应该只有一个爆炸方法同名.
推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有