Function 一个函数/过程/方法应该有多少行代码?

Function 一个函数/过程/方法应该有多少行代码?,function,coding-style,refactoring,code-metrics,Function,Coding Style,Refactoring,Code Metrics,可能重复: 我最近被赋予了一项令人不快的任务,那就是审查另一个开发人员编写的糟糕代码,并记录这些糟糕的做法。(当然,这一切都是为了避免支付开发者的工作费用,而不是出于任何利他原因!) 已审阅的代码有多个过程,这些过程包含多行代码,最长的是近600行。我想到的几个问题是可维护性和可读性 诀窍是,我需要向外行解释为什么这是一个糟糕的做法,如果可能的话,用一本广受好评的最新参考书来支持它。类比也很好 有什么想法吗 重复: 重复:这与代码行无关。正如和say(关于编码最佳实践的两个非常好的参考文献),

可能重复:

我最近被赋予了一项令人不快的任务,那就是审查另一个开发人员编写的糟糕代码,并记录这些糟糕的做法。(当然,这一切都是为了避免支付开发者的工作费用,而不是出于任何利他原因!)

已审阅的代码有多个过程,这些过程包含多行代码,最长的是近600行。我想到的几个问题是可维护性和可读性

诀窍是,我需要向外行解释为什么这是一个糟糕的做法,如果可能的话,用一本广受好评的最新参考书来支持它。类比也很好

有什么想法吗

重复:

重复:

这与代码行无关。正如和say(关于编码最佳实践的两个非常好的参考文献),一个方法应该做一件事,而且只能做一件事。不管需要多少行代码,一件事是它应该有多少行。如果“一件事”可以分解成更小的事情,那么每一件事情都应该有一个方法

好的线索你的方法不止一件事:

  • 方法中有多个缩进级别(表示逻辑分支太多,不能只做一件事)
  • “段落中断”-逻辑代码组之间的空白表示该方法正在做不止一件事

仅举几个例子。鲍勃·马丁还说保持在10点左右。就我个人而言,我通常试着拍10张。如果它开始接近20,这是一个心理信号,以密切关注该方法。但归根结底,代码行对于几乎任何东西都是一个糟糕的指标。这只是一个可能指向真正问题的有用指标。

为了补充Rex的观点,它也应该尽可能短。鲍勃·马丁说10个或更少


尽可能少。

我读这篇文章已经很多年了,但我认为在学习Perl的过程中,他们建议制作一个过程的时间不要超过一次在屏幕上显示整个过程的时间。我认为这是一个很好的标准。我见过由于重复代码(例如数据库访问和分配属性值)而仍然可读的较长函数,但这些都是例外,而不是常态。

真正的答案 没有具体的号码

具体答案 如果您必须向律师或其他人证明某个数字是正确的,那么请计算出适合您所在商店的典型开发编辑器窗口的最大行数,并使用该行数

一般做法 您甚至不应该这样看待它,但是在任何一个函数中都不应该发生非常复杂的事情

每个工作单元都应该委托给它自己的单元可测试描述命名方法。这样做,你所有的方法都会变得很小,而且可读性很好,而不需要计算行数


我所看到的最大冒犯是IF语句中间爆炸的3-4+布尔条件。首先,请注意长度限制与通常的度量完全不同,即“函数是否只做一件事,并且做得很好?”如果这个问题的答案不是肯定的,不管函数的长度如何,它可能不是一个好函数

与最大长度特别相关,代码完整的引用,通常被认为是关于编码实践主题的最佳书籍之一:

有时,一个复杂的算法会导致一个较长的例程,在这种情况下,应该允许例程有机地增长到100-200行。(一行代码是源代码的非注释、非空白行。)几十年的证据表明,这种长度的例程并不比较短的例程更容易出错。让嵌套深度、变量数量和其他与复杂性相关的考虑因素决定例程的长度,而不是强加长度限制本身

如果您想编写长度超过200行的例程,请小心。没有一项研究报告成本降低,错误率降低,或者两者都有,在大于200行的代码中,有较大的例程,当您通过200行代码时,您必然会遇到可理解性的上限


也可以在leaest one查看。更多,如果必要的话。@Alex-我理解这很糟糕,我同情你,但我只是指出,确保质量的时间不是在事实之后。此外,对于什么是好的代码没有一致的意见,因此在法庭上证明代码是坏的(假设代码有效)将是相当困难的。并且不要接受交付不符合合同中规定的最低标准的代码。一旦你接受了代码,你就很不走运了,因为作为承包人,你有责任确保你在接受产品之前收到了你所支付的费用。但是如果我的方法有200行代码(它不是由设计师生成的,它是纯业务逻辑)呢?你还认为,我不应该用代码行数来衡量吗?@sunilbudala答案是“一个方法应该做一件事,而且只能做一件事。不管需要多少行代码,一件事就是它应该有多少行。”