该篇文章参考了:
1. 阿里巴巴《java开发手册》v1.5.0 华山版
2. 《码出高效:Java开发手册》

单个方法的总行数不超过80行

在阿里巴巴《java开发手册》v1.5.0 华山版中第十一条
推荐单个方法的总行数不超过80行

为什么

推荐80行呢?还是除了注释之外的?80行随便写几个if、else 不就快80行了吗?

高内聚、低耦合

把相关的功能强内聚,把弱相关的功能拆解开来, 重新抽象、重新封装。是每个方法都都遵守单一职责原则。这样也有利于方法的复用。

魔数 3

心理学认为人对事物的印象通常不能超过3 这个魔法数, 三屏是人类短期记忆的极限,而80 行在一般显示器上是两屏半的代码量。

通过对阿里代码抽样调查显示, 只有不到5% 的方法才会超过80 行, 而这些方法通
常都有明显的优化空间。

如何重构、优化代码(压缩代码到80行)

虽然开发手册只是推荐级别,但不可否认的是:谁也不能忍受方法过长,比如1000行。假设现在公司确定下来规范,单方法不能超过80行或者100行或者120行,那么如何将长行数方法重构到这个数呢?

重构、抽象、封装

按照方法单一职责,一个方法只做一件事,封装单独的方法,把相关的功能强内聚,把弱相关的功能拆解开来,这样做有两个好处:

  1. 方便后面复用方法
  2. 方便编写单测

而对于封装方法时,涉及到方法的入参,通常会纠结参数的处理,拆分的方法间需要参数传递数据。
限制参数列表过长的方式有很多, 比如包装成类、隐式传递或放在集合中等。

如果不抽取、封装,一个变量可从方法第1行使用到第1000行,虽然不用考虑方法间用参数传递数据,但是超过3屏,你大概率会忘了这个变量声明的意义

条件取反,减少代码缩进

方案一

// idList 可能为方法入参,也可为从数据库查询
if(!CollectionUtils.isEmpty(idList)){for(String id : idList){// do something}}

方案二

Assert.notEmpty(idList,"idList should not be empty");
if(CollectionUtils.isEmpty(idList)){//throw new IllegalArgumentException("idList should not be empty");return;
}
for(String id : idList){// do something
}

对比两方案,方案二比方案一减少了一层代码缩进,同时在方案二中,若入参较多,且入参校验较多时,可单独提取公共方法。

卫语句 Guard clauses

如果条件语句极其复杂,就应该将条件语句拆解开,然后逐个检查,并在条件为真时立刻从函数中返回,这样的单独检查通常被称之为卫语句

设计模式

策略模式、状态模式

为什么阿里巴巴Java开发手册编码规范里推荐单个方法的总行数不超过80行相关推荐

  1. 304902阿里巴巴Java开发手册1.4.0

    转自官网 前言 <阿里巴巴Java开发手册>是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,系统化地整理成册,回馈给广大开发者.现代软件行业的高速 ...

  2. 【代码质量】-阿里巴巴java开发手册(代码质量提升神器)学习笔记

    前言:<阿里巴巴 Java 开发手册>是阿里巴巴集团技术团队的集体智慧结晶和经验总结,有了这些前人总结的经验,可以帮助我们写出高质量的代码,同时可以减少Bug数量,少踩坑,提高代码的可读性 ...

  3. 阿里巴巴Java 开发手册 码出高效,码出质量 1.4.0

    前言 <阿里巴巴Java 开发手册>是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,系统化地整理成册,回馈给广大开发者.现代软件行业的高速发展对开 ...

  4. 阿里巴巴 Java 开发手册1.4.0

    2019独角兽企业重金招聘Python工程师标准>>> 阿里巴巴 Java 开发手册1.4.0 1/38 Java 开发手册 1.4.0 阿里巴巴集团技术团队 2018.5.20 增 ...

  5. 《阿里巴巴 Java 开发手册 》读书笔记

    嗯,不知道啥时候搞的这个,无意中打开,感觉挺好,讲到了好多坑.利用这几天刷完,^_^     ^_^,加油生活!.书的PDF资源在最后. 2019.7.3 努力就是忘记自己在做什么,而只顾去做.--王 ...

  6. 熟读《阿里巴巴java开发手册》(一、编程规约)

    目录 (一) 命名风格 (二) 常量定义 (三) 代码格式 (四) OOP 规约 (五) 集合处理 (六) 并发处理 (七) 控制语句 (八) 注释规约 (九) 其它 (一) 命名风格 1. [强制] ...

  7. JAVA 开发命名规范——阿里巴巴Java开发手册

    0)Service/DAO层方法命名规约 1)获取单个对象的方法用get做前缀. 2)获取多个对象的方法用list做前缀. 3)获取统计值的方法用count做前缀. 4)插入的方法用save(推荐)或 ...

  8. java不进入for_为什么阿里巴巴Java开发手册中强制要求不要在foreach循环里进行元素的remove和add操作?...

    在阅读<阿里巴巴Java开发手册>时,发现有一条关于在 foreach 循环里进行元素的 remove/add 操作的规约,具体内容如下: 错误演示 我们首先在 IDEA 中编写一个在 f ...

  9. Mysql中的一绡规范约束,摘自《阿里巴巴 Java 开发手册》

    Mysql中的一些规范约束,摘自<阿里巴巴 Java 开发手册> 下载地址:http://download.csdn.net/detail/lengyue1084/9753135

最新文章

  1. Error:(49, 1) A problem occurred evaluating project ':guideview'. Could not read script 'https://r
  2. 介绍两个好玩的和Github相关的Chrome扩展
  3. python字符串内置方法
  4. js中window.onload 与 jquery中$(document.ready()) 测试
  5. Minimum supported Gradle version is 4.1. Current version is 4.0.
  6. 阿里云贾少天:大规模云服务器高效使用及管理实践
  7. 吴恩达机器学习作业二——逻辑回归
  8. OpenBSD操作系统(1)——服务管理程序rcctl 类似linux下的service或systemctl
  9. 【企业架构师】12 项企业架构师认证
  10. spss变量视图转数据视图_教大家SPSS如何导入数据进行分析
  11. 实训-利用HTML和CSS制作一个网页界面
  12. 二叉树多种遍历的时间复杂度和空间复杂度
  13. switch相关系列
  14. Display常用英文缩写
  15. SEO的道与术,因果关系的选择
  16. 关于宽带拨号上网的笑话,我自己闹的笑话。
  17. windows查看自己的网卡名称
  18. 一维参照物的摄像机定标
  19. 计算机远程桌面在哪里打开,电脑开启远程桌面的方法
  20. sony android mp3播放器,入手一年,详细聊聊 索尼ZX505、艾利和SR15 两款安卓播放器的使用体验...

热门文章

  1. StreamReader读取乱码
  2. Android光线传感器获取光线强弱。LightSensorManager封装类
  3. python怎么往list中间加数据_python list怎么添加元素
  4. java list iterable_java - 将Iterable转换为Collection的简便方法
  5. C中多个宏字符串拼接
  6. 本地sql数据库怎么与远程sql数据库同步?
  7. 【ACM】77. 组合
  8. 一个完整的python文件即是一个模块_用python玩转数据|基本语法
  9. MySQL主从复制环境搭建
  10. 2020最新MySQL数据库面试题( MySQL引索系统+MySQL数据架构+红黑树结构图+B+树)