请选择 进入手机版 | 继续访问电脑版

HTML5星空

Java方法不应超过15行

[复制链接]
发表于 2017-8-3 00:10:49 | 显示全部楼层 |阅读模式


1


大多数人都会说,方法不能太长,但也不能定死,要具体问题具体分析。


再追问一下,有人会说,不超过200行,100行,50行,30行都有。


另有人说,面向对象风格的可以短些,面向过程风格的可以长些。


也有人说,一个方法不超过一屏幕就行(姑且不论显示器大小,字体大小和分辨率问题)。


先摘录一段Martin Fowler《重构》P110-P111 中的一段话:


人们有时会问我,一个函数多长才合适?


在我看来,长度不是问题,关键在于函数名称和函数本体之间的语义距离(semantic distance)。


如果提炼动作(extracting)可以强化代码的清晰度,那就去做,就算函数名称比提炼出来的代码还长也无所谓。


说了直白点,函数名是干什么,函数体是怎么干。


当 2 者不是那么能容易分辨出来时,就需要提炼出函数来,让代码更好懂。


既然大师都说了,长度不是问题了吗,那干嘛还要追究函数长度规范呢?


其实大师讲的是对于懂得编程之道的人而言,不用关心长度,因为小函数是必然的结果。


但在开发实践中,适当的函数长度限制值,可以给予我们警示,为什么这个方法写长了?哪里不对劲了?


对于这个问题我的回答是:Java函数不应超过15行。


为什么定这个数呢?


一方面,这个是基于多年开发实践的总结。


15行其实已经是一个比较宽松的标准,开发人员稍加培训就可以实际贯彻,而符合这个标准的函数也能达到良好的可读性。


2


另一方面,这是基于对函数复杂度和代码行数之间关联关系的认识。


我采用一个简单的数学公式:


方法复杂度 >= 代码行数^2


以下为了简化,只以最低增长方式,平方数进行计算。


以一个函数的行数,从1行到20行为例,见下图:



当函数行数到达10行以上,函数复杂度就开始大幅度攀升。


当代码行数达到20行时(复杂度400),其复杂度已经是14行时(复杂度 196)的2倍。


因此我将代码规范定在15行。


下面我们运行此公式,来分析一下提炼小函数的好处。


例如,有1个100行的函数,分解为11(含自身)个10行的函数。


原复杂度= 100^2=10000。


分解后复杂度= 11×(10^2)= 1100。


分解后的复杂几乎是分解前的 1/9,几乎降低了1个数量级。


这就解释了为什么长方法分解之后,可维护性大幅度提高。


也就无怪乎有同学表示维护1000行以上的函数,有种生不如死的感受。


尚学堂--8月开班时间

Java--零基础入门就业班


开课时间:

2017年08月08日、

8月15日、8月22日   

抢座中..


电话:029-62258374  

地址:陕西省西安市高新区科技二路西安软件园天泽大厦五楼


免费公开课

每周二、四、六

周二周四公开课下午两点开始

周六公开课早上九点开始

在公众号主页发送【试听】获取免费听课名额



作者:Eric

点击下方"阅读原文"获取免费听课名额


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快讯
发布主题 快速回复 返回列表

     京ICP备14042305号

html5star team © 2012-2013 html5星空 Comsenz Inc.

GMT+8, 2018-12-14 04:24 , Processed in 0.189667 second(s), 37 queries .

快速回复 返回顶部 返回列表