2010-07-06 22 views
5

我说1到5行之间。除此之外,您还应该通过电子邮件向其他开发团队证明自己的合理性。这有助于重用,强制命名和搭配方法。什么是好的平均方法大小?

有何评论?

由于

+2

可以有25个1行方法和1个100行方法吗? – Yellowfog 2010-07-06 11:59:25

+15

只要它*需要*,大小/行数就不如函数**做一件事**,IMO那么重要。 – 2010-07-06 12:00:17

+0

我个人认为没有定义的答案是“正确的”。但是,你认为你想观看今年在伦敦QCon举办的“鲍勃叔叔”马丁的演讲,他在那里谈论了这个话题:http://www.infoq.com/presentations/Robert-C.-Martin-Bad - 代码 – AdaTheDev 2010-07-06 12:02:44

回答

1

有些极端,我想的5或更小的复杂性cyclometric是一种合理的手段,而不是线的数目。将代码分解为少于5行可能意味着使代码难以阅读和费力。我知道这将会有不同的想法,这就是为什么这个线程应该被视为主观的关闭。

5

1行和5行似乎对我来说太小了一些限制。如果您将简单的业务应用程序组合在一起,但没有做太多的处理,那么这看起来没问题,但是如果有任何算法或流程,它们通常更具可读性(并且可维护),以便按顺序编写处理步骤,而不是跨多种方法或类 - 即使它对于封装,验证等是合乎逻辑的。

5号线在很多情况下甚至没有足够验证参数和迭代通过集合。

我会建议'关于一页'; 20至30行是理想的。


例如:这似乎是有效的给我,但你会认为这是不擅长的8号线:

// Calculates the depth of the layer in the object graph 
    public int GetIndex() 
    { 
     int ct = 0; 
     ViewLayer pos = this; 
     while (pos.Parent != null) 
     { 
      ct++; 
      pos = pos.Parent; 
     } 
     return ct; 
    } 

(我知道我张贴代码开放自己了批评,但我的点表示,这是可读的代码)

+2

这是_way_太长,你应该使用这样的东西:'公众诠释GetIndex(ViewLayer pos =这个){\ n返回(pos.Parent == null)? 0:1 + GetIndex(pos.Parent); \ n} \ n'在3行计时:-) – paxdiablo 2010-07-06 12:20:56

+1

这不是干净的代码。干净的代码为这样一个微不足道的任务不需要评论。首先,名称可能是DepthInObjectGraph。其次,这可能是递归的,需要1或4行,这取决于你是否喜欢if/else或?:。 – qertoip 2012-04-07 13:50:46

+0

@qertiop - 干得不错,你找到了一种改进代码的方式 - 这几乎总是可能的。你的评论与答案有关,即你认为没有方法应该超过1-4行? – 2017-11-23 15:18:17

16

方法的代码大小是方法的责任错误的度量。该方法应该只有一个主要行为/创建任务没有代码重复。

1

我认为它比这更复杂。

首先,方法倾向于遵循幂律分布:在任何给定的项目中,都会有一些比绝大多数其他方法大得多的平均尺寸永远不会收敛的方法。

其次,如果你需要发出,以满足一个特定的任务10个API调用,也打破调用顺序为两种方法只是为了满足尺寸上限是没有意义的。当你把某些东西分解成若干部分时,你必须给出两个名字(甚至三个)而不是一个。你必须记录每个部分,等等。底线:小是好的,但不要盲目追随它。最好的建议是尝试使每种方法一致(集中)。

1

当然,只是让代码更难导航和理解,A调用B,调用C,那么E,然后d,等我不知道它如何执行良好的命名,我有足够的麻烦想出很好的描述性名称对于我现有的方法,从来没有想过一个5行。

它还使类更长,因为您必须拥有方法签名,打开和关闭大括号以及额外的可读性行。

此外,大多数我的LINQ语句都超过5线长。

2

让代码的要求决定了多久太长。

你真的希望你的开发人员花时间写电子邮件而不是开发你的代码库吗?

相关问题