良好的练习班级计数

时间:2009-07-06 13:04:50

标签: code-size

我知道这个问题没有正确的答案,我只是在征求你的意见。

我知道用千行代码创建HUGE类文件并不是一个好习惯,因为它很难维护,而且通常意味着你应该检查你的程序逻辑。

在您看来,类似于Java的平均行数(我不知道语言的选择是否与它有关,但以防万一......)

12 个答案:

答案 0 :(得分:30)

是的,我会说它确实与语言有关,只是因为某些语言比其他语言更冗长。

一般来说,我使用这些经验法则:

  • < 300行:很好
  • 300 - 500行:合理
  • 500 - 1000行:也许没问题,但计划重构
  • > 1000行:绝对重构

当然,它实际上更多地取决于代码的性质和复杂性而不是LOC,但我发现这些是合理的。

答案 1 :(得分:16)

一般来说,行数不是问题 - 稍微好一点的指标是公共方法的数量。但是没有正确的数字。例如,实用程序字符串类可能正确地有数百个方法,而业务级类可能只有几个。

如果您对LOC,圈和其他复杂度测量感兴趣,我强烈推荐http://www.campwoodsw.com的源监视器,它是免费的,适用于主要语言,如Java& C ++,并且非常棒。

答案 2 :(得分:9)

来自Eric Raymond的“Unix编程艺术”

  

在非数学术语中,哈顿的经验结果意味着200到400个逻辑代码行之间的最佳点,可以最小化可能的缺陷密度,所有其他因素(例如程序员技能)相等。这个大小与所使用的语言无关 - 这一观察结果强有力地强化了本书其他地方给出的建议,使用最强大的语言和工具进行编程。但要小心这些数字。计算代码行的方法根据分析师认为的逻辑行和其他偏差(例如是否剥离注释)而有很大差异。哈顿本人建议在逻辑线和物理线之间进行2倍转换,这表明最佳范围为400-800条物理线。

取自here

答案 3 :(得分:8)

最好测量cyclomatic complexity之类的东西并将其用作衡量标准。你甚至可以将它粘贴在你的构建脚本/ ant文件/ etc中。

即使使用标准化的代码格式,也很容易使代码行与类的真正复杂性脱节。

修改:有关圈复杂度工具的列表,请参阅this question

答案 4 :(得分:5)

我专注于方法并且(尝试)将它们保持在20行代码之下。课程长度通常由单一责任原则决定。但我认为这不是绝对的衡量标准,因为它取决于抽象的程度,因此在300到500行之间,我开始查看代码以获取新的责任或抽象。

答案 5 :(得分:4)

小到足以完成它所负责的任务。

足够大,只能完成它所负责的任务。

不多也不少。

答案 6 :(得分:2)

根据我的经验,任何超过1000个文本行的源文件我都会想要分手。理想情况下,如果可能,方法应该适合单个屏幕。

最近我开始意识到删除无用的评论可以帮助你做到这一点。我现在比20年前第一次开始编程时更加谨慎地评论

答案 7 :(得分:1)

答案简短:不到250行。

答案较短:Mu。

答案越长:代码是否可读且简洁?班级有一个单一的责任吗?代码重复了吗?

答案 8 :(得分:1)

对我来说,问题不在于LOC。我看到的是几个因素。首先,我检查我的If-Else-If语句。如果他们中的很多人具有相同的条件,或导致运行类似的代码,我会尝试重构它。然后我看看我的方法和变量。在任何单个类中,该类应该只有一个主函数而且只有该函数。如果它有不同区域的变量和方法,请考虑将它们放入自己的类中。无论哪种方式,避免计算LOC有两个原因:

1)这是一个糟糕的指标。如果算上LOC,你不仅要计算长行,还要计算空白行并用于评论,就像它们是相同的一样。你可以避免这种情况,但与此同时,你仍然可以平均计算小线和长线。

2)这是误导。可读性不仅仅是LOC的功能。一个类可以完全可读,但是如果你有一个它违反的LOC计数,你会发现自己正在努力挤出尽可能多的线。您甚至可能最终使代码无法读取。如果你让LOC分配变量然后在方法调用中使用它们,那么它比在方法调用本身中直接调用那些变量的赋值更具可读性。最好有5行可读代码,而不是将它压缩成1行不可读的代码。

相反,我会考虑代码深度和行长度。这些是更好的指标,因为它们告诉你两件事。首先,嵌套深度告诉您是否需要重构逻辑。如果您正在查看嵌套超过2深的If语句或循环,请认真考虑重构。如果您有多个嵌套级别,请考虑重构。其次,如果一条线很长,通常是非常难以理解的。尝试将该行分成几条更易读的行。如果你有一个,这可能会破坏你的LOC限制,但实际上确实提高了可读性。

答案 9 :(得分:1)

行计数== bean计数。

当你开始使用工具来找出某个文件或函数有多少行代码时,你被搞砸了,恕我直言,因为你不再担心代码的可管理性,并开始官僚制定规则和指责。

查看文件/功能,并考虑它是否仍然适合使用,或者开始变得笨拙。如果有疑问,请联系合作开发人员(或者,如果您正在运行一个单人秀,一些与项目无关的开发人员)来查看,并快速聊聊它。

真的就是这样:一看。其他人是否会立即得到代码的偏差,或者对于不熟悉的人来说这是一本封闭的书吗?这个快速的外观告诉您更多关于一段代码的可读性,而不是任何有线设备指标。这取决于很多东西。语言,问题域,代码结构,工作环境,经验。一个项目中的一个功能对于另一个项目来说可能是不合适的。

如果您处于团队/项目状态,并且不能通过这种“快速查看”方法轻易达成一致,那么您会遇到社交问题,而不是技术问题。 (不同的质量标准,以及可能的通信故障。)对文件/功能长度的规则不会解决您的问题。坐下来谈论冷饮(或咖啡,取决于......)是一个更好的选择。

答案 10 :(得分:0)

你是对的......没有答案。你不能把“最佳实践”作为一些代码行。

然而,作为一个指导方针,我经常会在一页上看到。一旦方法不适合一页,我就开始认为我做错了什么。就整个类而言,如果我在一个页面上看不到所有方法/属性标题,那么我可能需要开始将其拆分。

但是,真的没有答案,有些事情必须要变得大而复杂。事实上,你知道这很糟糕,你现在正在考虑它,这可能意味着当事情失控时你会知道何时停止。

答案 11 :(得分:0)

代码行比任何其他东西更多关于详细程度。在我正在工作的项目中,我们有一些超过1000 LOC的文件。但是,如果你删除评论,它可能会保持大约300甚至更少。如果您更改

之类的声明
int someInt;
int someOtherInt;

到一行,文件会更短。

但是,如果你没有冗长而且你仍然有一个大文件,你可能需要考虑重构。