可能重复:
How many lines of code should a function/procedure/method have?
我想知道应该有多少行代码?多少行是太多了。
我读了一会儿,大约10或20行,但这是因为屏幕只能容纳这么多行。现在随着屏幕尺寸变大,这将不成立。
让我们假设函数的任何部分都在其他任何地方使用,即忽略DRY原则。
我想听听其他人对此有何看法。
感谢。
注意:When is a function too long?重复,发布时无法找到。
答案 0 :(得分:17)
线条无关紧要,但复杂性是。
一个函数应该完成一项任务,而且应该很明显。它不应该花费你很多时间来确切了解函数的确切方式和功能。
答案 1 :(得分:5)
Code Complete已经很好地回答了这类问题。 Steve McConnel写了整个页面来回答这个问题。他的结论是:
数十年的证据表明惯例 这种长度(> 100行)是否定的 比短期更容易出错 例程。 让问题如 例行公事的凝聚力,决定的数量 要点,需要注释的数量 解释例程等 与复杂性相关的考虑 决定例程的长度 而不是强加一个长度 限制本身。那说,如果你 想要编写比例更长的例程 约200行,小心。
答案 2 :(得分:4)
它应该有所需的数量。
我没有看到将功能行计数限制为屏幕大小的任何意义(可以公平地说,我没有开始编程,直到屏幕可能超过10-20行 - 这可能是有意义的一些环境)。只需编写有意义的函数即可。当它变得如此之大以至于代码片段开始重复时,将这些片段重构为其他函数/类/组件。
答案 3 :(得分:2)
这是一个非常随意的经验法则。有些像20行,有些像无滚动规则。最后,只需确保它的可读性和易于理解的一目了然。阅读SOLID principles并确保该方法只承担1项责任等。
答案 4 :(得分:1)
只要有必要,尽可能短。
我采用5-10行作为经验法则,但如果有一些逻辑不能(重新)轻易地分解为多个函数,我会在必要时写更长的时间。另一方面,我经常只有一两行的功能。
如果你不立即了解代码的一部分,请为它编写一个新函数。
答案 5 :(得分:0)
我不认为它有多少行......只要它有效。
任何可以在代码库中的任何地方重用的代码都应该移动到同一个类或共享类中的另一个函数/方法并调用。
答案 6 :(得分:0)
我之前也听过屏幕尺寸指标,但显然不是硬限制或随显示器尺寸缩放。它只是为了传达DRY的原理,并且保持函数尽可能小是编写可以扩展的代码(项目大小)的最佳方法之一。
答案 7 :(得分:0)
Linux内核编码样式文档说:
功能应该简短而甜蜜, 做一件事。他们应该 适合一两个文本 (ISO / ANSI屏幕尺寸为80x24,如 我们都知道),做一件事,做 那很好。
现在,我意识到这是在内核代码的上下文中,但我认为它的一些要点:函数长度通常是有效的。查找副本here。关于功能的部分是第4章。
总而言之,功能长度不应受某些人为规则的约束;如果它有意义,那么因为它会使东西更容易阅读,但是关于1-2个屏幕的规则并不是一成不变的。
答案 8 :(得分:0)
这只是一个oo视角的意见:
我更喜欢将我的方法保留在逻辑工作单元中,并且不关心像LoC这样的指标。这使得正确命名方法也很容易,并防止它们变得臃肿。
一个非常简单的函数示例将是一个函数,它在循环中内联计算fibonacci序列,我将添加一个由fibonacci()函数调用的后继函数(int a,int b)。
oo方式中更复杂的例子是执行GET请求的http客户端。我会把它分解成这样的东西:
Connection getConnection(String host, int port)
Request createRequest(String[] params)
void sendRequest(Request r)
String getResponse(Connection c,Request r)
答案 9 :(得分:0)
功能应该足够小才能完成它们的工作,但不能小一些。