可能的重复:
函数/过程/方法应具有多少行代码?

我想知道应该有多少行代码?多少行太多。

我不久前就读了这篇文章,大约有10或20行,但这是因为屏幕只能容纳这么多行。现在,随着屏幕尺寸变大,这将无法实现。

让我们假设该功能的任何部分都用于其他任何地方,即无视干燥原则。

我想听听别人对此的评价。

谢谢。

笔记: :重复 功能什么时候太长?, ,当我发布时找不到它。

有帮助吗?

解决方案

这种问题得到了很好的回答 代码完成. 。史蒂夫·麦康奈尔(Steve McConnel)写道 整个页面 回答这个问题。他的结论:

数十年的证据表明,这种长度(> 100行)的例程比较短的例行程序更容易容易出错。 让诸如例行程序的凝聚力,决策点的数量,解释例程所需的评论数以及其他与复杂性相关的考虑的问题决定了例行程序的长度,而不是施加长度限制本身。 也就是说,如果您想编写的例程更长的时间超过200行,请小心。

其他提示

线无关,但复杂性是无关紧要的。

功能应该执行一个任务,应该很明显。确切地了解该功能的工作方式,不应花费您的时间超过一会儿。

它应该拥有尽可能多的东西。

我没有看到限制屏幕尺寸的功能行计数的任何意义(可以公平地说,直到屏幕能够接管超过10-20行之后,我才开始编程 - 也许在某些环境中这确实很有意义) 。只需写入有意义的功能即可。当它变得如此之大,以至于代码开始重复,将这些零件重构为其他功能/类/组件。

这是一个非常任意的经验法则。有些人喜欢20行,其他类似于无螺旋规则。最后,只需确保它是可以阅读的,并且很容易理解。阅读您的 坚实的原则 并确保该方法只有1个责任,等等。

只要必要,尽可能短。

我将5-10行作为经验法则,但是如果某些逻辑不能(重新)轻松地分解为多个功能,则在必要时写得更长的时间。另一方面,我经常有一两行长的功能。

如果你不 立即 了解代码的一部分,为其编写一个新功能。

我认为只要有效,它的行为都不重要。

代码库中任何地方可以重复使用的任何代码都应移动到同一类或共享类中的另一个函数/方法并调用。

我之前也听过屏幕尺寸指标,但显然并不是要成为硬限制或以监视器尺寸扩展。它只是打算传达干燥的原理,并且保持功能尽可能小的是编写可以扩展(项目规模)的代码的最佳方法之一。

Linux内核编码样式文档说:

功能应该简短而甜美,只做一件事。它们应该适合一个或两个屏幕上的文本(众所周知,ISO/ANSI屏幕尺寸为80x24),并做一件事并做得很好。

现在,我意识到这是在内核代码的背景下,但是我认为它提出的一些要点通常是有效的。查找副本 这里. 。有关功能的部分是第4章。

总而言之,功能长度不应受到某种人工规则的约束。如果有意义的话,则要解决问题,并且因为它使内容更容易阅读,但是关于1-2个屏幕的规则不是用石头编写的。

这只是OO-perspective的意见:

我更喜欢将方法保留在工作单位中,并且不在乎像LOC这样的指标。这也使得正确命名您的方法并防止它们变得肿,这也非常容易。

一个非常微不足道的函数示例将不是具有在循环中计算斐波那契序列内联函数i会添加后继(int a,int b)函数,该函数由fibonacci()函数调用。

以OO方式更复杂的示例将是执行GET请求的HTTP客户端。我会把它分解为这样的东西:

Connection getConnection(String host, int port)
Request createRequest(String[] params)
void sendRequest(Request r)
String getResponse(Connection c,Request r)

功能应该足够小,可以完成工作,但没有较小的功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top