Function 函数长度应该有多大(函数中的代码行)?

Function 函数长度应该有多大(函数中的代码行)?,function,lines-of-code,Function,Lines Of Code,可能重复: 我想知道函数应该有多少行代码?多少行太多了 我之前读过这篇文章,大概有10到20行,但这是因为屏幕只能容纳这么多行。现在,随着屏幕尺寸变大,这种情况就不成立了 假设函数的任何部分都不用于其他任何地方,即忽略干燥原则 我想听听其他人对此有什么看法 谢谢 注意:的副本,在我发布时找不到。它应该有它需要的数量 我认为将函数行数限制为屏幕大小没有任何意义(公平地说,我是在屏幕可以容纳10-20行之前才开始编程的——也许这在某些环境中是有意义的)。只需编写对您有意义的函数。当它变得如此庞大以

可能重复:

我想知道函数应该有多少行代码?多少行太多了

我之前读过这篇文章,大概有10到20行,但这是因为屏幕只能容纳这么多行。现在,随着屏幕尺寸变大,这种情况就不成立了


假设函数的任何部分都不用于其他任何地方,即忽略干燥原则

我想听听其他人对此有什么看法

谢谢


注意:的副本,在我发布时找不到。

它应该有它需要的数量


我认为将函数行数限制为屏幕大小没有任何意义(公平地说,我是在屏幕可以容纳10-20行之前才开始编程的——也许这在某些环境中是有意义的)。只需编写对您有意义的函数。当它变得如此庞大以至于代码片段开始重复时,将这些片段重构为其他函数/类/组件。

这是一个非常随意的经验法则。有些人喜欢20行,有些人喜欢不滚动规则。最后,只要确保它是可读的,并且一眼就能理解。仔细阅读你的文章,确保这个方法只有一个职责,等等。

我认为它有多少行并不重要……只要它是有效的


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

我以前也听说过屏幕大小度量,但显然不打算成为硬限制或随监视器大小进行缩放。它只是为了传达DRY的原则,并且使函数尽可能小是编写可伸缩(以项目大小)代码的最佳方法之一。

行是不相关的,但复杂性是不相关的


一个函数应该完成一项任务,并且应该是显而易见的。您不应该花费超过几分钟的时间来准确理解函数的工作方式和内容。

尽可能长,尽可能短

我以5-10行作为经验法则,但如果有一些逻辑不能很容易地(重新)分解成多个函数,我会在必要时写更长的代码。另一方面,我经常有一行或两行长的函数


如果您不能立即理解代码的一部分是做什么的,请为它编写一个新函数。

Linux内核编码风格文档说:

功能应该简短而甜美, 只做一件事。他们应该 适合一到两屏文本 (ISO/ANSI屏幕尺寸为80x24,如下所示: 我们都知道),做一件事 那好

现在,我意识到这是在内核代码的上下文中进行的,但我认为它使re:function length的一些要点通常是有效的。找一份。关于功能的部分是第4章


总之,函数长度不应受到人为规则的约束;如果有意义的话,考虑一下内容,因为它使内容更容易阅读,但是关于1-2个屏幕的规则不是一成不变的

这种问题在英语中得到了很好的回答。史蒂夫·麦康奈尔写了整整一页来回答这个问题。他的结论是:

几十年的证据表明 这种长度(>100行)的 比较短的更容易出错 例行程序让问题如 例程的内聚性、决策数量 点数,需要添加的注释数 解释常规,以及其他 与复杂性有关的考虑 规定例行程序的长度 而不是强加一个长度 限制本身。也就是说,如果 希望编写比 大约200行,小心点


这只是一个面向对象的观点:

我更喜欢将我的方法保持在工作的逻辑单元中,而不真正关心像LoC这样的度量。这也使得正确命名方法非常容易,并防止它们变得臃肿

一个非常简单的函数示例是,我将添加一个后继函数(inta,intb),该函数由fibonacci()函数调用,而不是在循环中内联计算fibonacci序列

oo方式中一个更复杂的示例是执行GET请求的http客户端。我会把它分解成这样的东西:

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

函数应该足够小,足以完成其工作,但不能更小。

假设函数的任何部分都不用于其他任何地方,即忽略干燥原理。更改了有关干式原理的问题。部分函数今天可能不会在其他任何地方使用,但明天或明年如何?当您回到代码并需要使用该功能时,它是否在其自身的功能中随时可用,或者您是否需要将其从现有功能中撬出?当您达到这一点时,重新考虑旧函数可能会有太多的工作或太多的不稳定因素,因此您只需复制您想要的部分。这是违反DRY的主要方式。你很少会后悔做了一个额外的函数或类,但你经常会后悔没有做。大小确实很重要——可读性非常重要,当遇到一堆文本时,我们程序员(效率很高)都会对这个函数着迷。我知道,我们都喜欢假装不喜欢,但我们喜欢。你可以让代码可读,而不需要创建更多函数。在回答这个问题之前,我们需要定义“代码行”。27.5威尔,谢谢你的无意义评论。希望你感觉好些。根据我的经验,一个“控制器”或“主回路”怎么样?它们往往比一个单一用途的函数要复杂一点——当然,也许我做错了。。。总的来说,我同意你的意见,但我认为总有一些问题exceptions@blissapp:嗯,总是有明显的例外;)