brg*_*brg 12 ruby coding-style class rubocop
我得到rubocop错误'类定义太长.[100分之236]".我的课程如下:
class SomeClassName
include HelperModule
attr_accessor :aaa, :bbb, :ccc
.... methods .....
end
Run Code Online (Sandbox Code Playgroud)
可能出什么问题?rubocop docs ClassLength说"类的长度超过某个最大值".这是什么意思?
小智 16
是的,这是因为rubucop认为整体线路太多了.我同意课程不应该太长,但认为最终应该由以下几个方面决定:课程是否有一个责任,方法是否足够简洁,是否有可以通过模块共享的方法等等...数字/警报虽然是一个很好的警告.如果类中的内容看起来没问题,您可以# rubocop:disable ClassLength在类定义的正上方添加.
(这里有很多好的信息,但是我找到了这个答案,寻找在Rubocop中指定每个类的最大行数的语法,我想其他人也可能会来这里.)
在.rubocop.yml
# Allow classes longer than 100 lines of code
ClassLength:
Max: 250 # or whatever ends up being appropriate
Run Code Online (Sandbox Code Playgroud)
如果我希望我的班级在这里超过100或需要配置最大长度,我是否需要禁用此警察.你会建议什么?
我在这个工作流程中使用rubocop,假设我遇到一个预先存在的代码库,其中包含大量警告:
运行rubocop --auto-gen-config以创建"TODO"文件.在主rubocop配置文件中包含该文件.有关详细信息,请参阅文档 在您的示例中,它将生成一个允许长类的配置(如果您有更大的类,则至少236行或更多行).
现在,如果你运行rubocop,它将忽略你在TODO文件中放置的所有攻击 - 也就是说,现在一切都会好起来的.只有当你引入更多的错误/警告(比如一个237行的类)时,它才会重新启动.所以,在这一点上,rubocop除了阻止你让它变得更糟之外,不会为你做任何事情.
有一段时间,当我有时间杀死时,我从TODO文件中选择一条规则并对其进行处理.有三种可能性:
rubocop.因此,关于所有这些并没有严格的规则.你应该找到自己的价值观.rubocop对象的一些东西对我来说完全没问题,因为它们更多地归结为编码风格而不是正确性等等.
如果我希望我的班级在这里超过100或需要配置最大长度,我是否需要禁用此警察.你会建议什么?
我当然确实为我的类文件(以及方法)配置了最大数量的行.代码单元的长度(无论是类还是方法)是一种非常简单但有效的"代码气味",它指向成长的代码和重构/分裂的候选者.
我为我挑选了一些数字,我坚持下去.也就是说,我不会经常向上或向下移动它们以适应特定代码,但如果一段代码增长"1行太大",我就会采取行动.大多数情况下,我的目标是将其大致分成两半,从长远来看,这将导致所需的最小努力.
如果一个课程很长,它通常会打破"每班一个责任"的规则.将其分解成部分通常是有益的.不仅是随机的子类,而且是具有OO合理性,图案化的构造.
如果一个方法很长,它有时可能指向要采取的OO措施(即,引入的类或方法被分割为现有的类;特别是如果该方法由大型if/else构造或特别是case语句组成),但更多时候它需要简单的老式重构为较小的(可能是私有的)方法.
在rubocop中找到你最喜欢的设置很有趣,真棒.