有意义的命名
1、名副其实
2、避免误导,eg:
1)用accountList来指称一组账号,但是并非是list类型。
2)用小写字母l和大写字母O,容易和1、0误导。
3、做有意义的区分,eg:
1)多个对象命名为a1、a2、a3,完全没有提供正确信息。
2)有一个Product类,还有一个ProductInfo或ProductData,意思没有区别。
4、不要废话
1)table一词永远不要出现在表名中
2)Name比NameString好,因为Name一看就知道会是String类型。
3)程序员怎么知道要调用哪个函数

getAccount()。
getAccounts()。
getAccountInfo()。

4)使用读的出来的名称,
5)使用可搜索的名称,比如,一个变量为e,而e在很多词中包含,在搜索时就要搜索很多了。
6)成员变量前不要加前缀。
7)接口和实现类中,接口用前导字母I被滥用了。宁可对实现类编码。
8)类名和对象名应该是名词,不应该是动词。
9)方法名应该是动词或动词短语。

函数
1、函数应该尽量短小,且只干一件事。
2、if、else、while的代码块中,应该只有一行,多行应抽成一个函数。
3、函数中的语句都要在同一抽象层级上。
4、对于swicth语句,天生就是做多件事,解决方案是将其隐藏在抽象工厂中。
5、函数参数数量应尽量少,为0最好。
6、参数多了,对测试人员各种组合运行案例也很麻烦。
7、如果一个函数的参数有多个,就说明一些参数应该封装为类了。
8、避免使用输出参数。
9、使用异常代替错误码,因为可以从错误处理代码从主路径中分离。
10、把try catch中的代码块抽出来形成函数。
11、使用错误码就意味着某个枚举类,会被很多代码依赖,修改时,所有这些类都需要重新编译和部署。
12、大函数中,应遵循结构化编程规则,代码块只有一个入口、一个出口,意味着每个函数只能有一个return语句,循环中部能出现break、continue,永远不能有goto。

注释
1、不应该通过注释来解决烂代码的难度,应该优化代码。
2、想办法不去写注释。尽量用函数名称传达信息。
3、TODO注释,认为应该做但还没做的注释。

格式
1、package、import、函数与函数间要有空格。
2、函数A调用函数B,则函数A应该放在B的上面。
3、赋值操作,左右两边和运算符之间要有空格。
4、乘法因子间没加空格,是因为它们有较高的优先级,加减间要有空格。
5、制定团队编码风格
1)在什么地方放置括号。
2)缩进几个字符。
3)类、变量、方法等的命名。

异常
1、别返回null值。因为调用者必须添加检查null的逻辑。
2、返回null值,不如抛出异常或是返回特例对象。
3、这样返回list类型的对象,可以避免调用方出现空指针异常。

4、Collections.emptyList()方法,返回了一个空的List,但是和我们平时用的List是不一样的。这个List是Collections类的静态内部类,继承AbstractList后并没有实现add()、remove()等方法,因此并不能对元素做增删改查。那有什么用呢?主要目的是返回一个不可变的列表,从而不需要自行创建一个新空对象,可以减少内存开销。也使得调用者不需要校验返回值是否为null,所以建议使用。emptySet()、emptyMap()方法同理。

单元测试
1、测试代码和生产代码一样重要。
2、测试代码应整洁,好看。有的时候性能不要求到极致,比如StringBuffer在字符串拼接时,比String好看,但是性能差一点,不要差太多也可以在测试代码中用。
3、每个测试函数只测一个概念。
4、测试的FIRST原则
1)快速(FASF)
2)独立(Independent)
测试函数不能相互依赖
3)可重复(Repeatable)
4)自足验证(Self-Validating)
测试结果要有布尔值输出,不应该依赖自己的判断。
5)及时(Timely)
测试代码应先于生产代码前编写。


1、从上到下,依次是:公共静态常量、私有静态变量、私有实体变量、公共函数。公共函数调用的私有工具方法紧接在这个函数之后。
2、类应只有一条修改的理由。
3、类尽量短小。
4、从一个大函数中抽出一个小函数时,如果这个小函数用到了4个变量,是否要将这些变量都作为形参传递到小函数呢?其实不用,只需要将这4个变量提升为类的实体变量即可。可惜这也让类丧失了内聚性,因为这几个新的实体变量只为这一两个函数所使用,何不把这一两函数拥有自己的类呢。
5、当类丧失了内聚性,就得拆分他。
6、对类的任何修改都有可能破坏类中的其他代码,必须全面再测试。
7、对增加开放,对修改封闭。

迭进
1、测试
2、消除重复
抽取共同代码,甚至采用模板方法模式
3、表达力
4、使类和函数的数量尽量少
这个优先级最低

并发
1、并发缺陷并非总能复现,所以常被看作偶发事件而被忽略。
2、掌握concurrent、atomic、locks这三个包。
3、不同的操作系统有着不同的线程策略。

总结
1、什么方法定义为静态,什么又不应该定义为静态。比如Math.max(double a,double b)被定义为静态方法,因为该方法用到的全部数据来自己传入的两个参数,而不是来自所属对象。但是没机会用到静态方法的多态特征。
2、什么时候将方法定义为静态
1)参数不依赖于所属对象
2)不会用到多态

clean_code总结相关推荐

  1. 通过forms来创建用户注册

    注册 通过django的Form来生成标签 form主要是可以保存数据,也可以生成标签,对于登录和注册来说使用方便 下面创建了forms.py模块,然后倒入这个模块到views里面,这样是为了后面的好 ...

  2. 如何编写无法维护的代码_编写可维护的前端代码

    点击这里获得更好的阅读体验​github.com 以下是本人在团队内部分享的整理和补充,水平有限,如有错误,请不吝赐教. 大家好,我叫王力国,目前是 RPA 前端团队负责人,过去一年我们从零构建了 R ...

  3. Django Form

    Form组件 创建Form类时,主要涉及到 [字段] 和 [插件],字段用于对用户请求数据的验证,插件用于自动生成HTML form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进 ...

  4. django踩坑记录(4)

    0x0d.如何设置不同登录方式,显示不同的标签及对应的form表单的字段?下面代码超级多细节,真的值得看 描述的情景如下图: 代码实现思路:两个不同的登录方式是:账号密码登录和使用短信验证码登录. 1 ...

  5. django+xadmin学习笔记

    第1章 强力django+杀手级xadmin 打造上线标准的在线教育平台-导学 课程简介和学习安排 1-1 强力django+杀手级xadmin 打造上线标准的在线教育平台 第2章 开发环境搭建-li ...

  6. 面试阿里!妹子终面,阿里面试官问:有没有男朋友? 结果...

    点击"开发者技术前线",选择"星标????" 在看|星标|留言,  真爱 作者:  前线小熙  | 责编: 可可   来源 :开发者技术前线  刚好要到端午节前 ...

  7. Java进阶学习各种经典书籍电子版

    存放JAVA开发的设计思想.算法:<剑指Offer>.<编程珠玑>.<深入理解Java虚拟机:JVM高级特性与最佳实践>.<重构-改善既有代码的设计 中文版& ...

  8. 2018.7.9-注册及头像预览

    谈一谈今天围绕form表单中遇到的问题 简单的form表单的创建这里就不多说了,首先我遇到的是一个验证码验证的问题,由于form表单需要写的东西很多,我将它单独做成了一个模块 贴上注册表单的内容: c ...

  9. Github、Gitee优秀的开源项目

    收集 Github.Gitee优秀的开源项目,并进行归类整理.项目地址 目录 编程语言项目 SprinBoot 项目 源码分析项目 前后端分离项目 Vue2 项目 Vue3 项目 微服务项目 Api ...

最新文章

  1. Mac 上使用 Clion 阅读C++源码的一些操作
  2. 【鸿蒙 HarmonyOS】Ability 中使用纯代码绘制布局及 UI 组件
  3. 数字图像处理中常用的插值方法
  4. IT-标准化(中国)有限公司-网络拓朴图
  5. solr中的ik分词器的原理是什么
  6. linux日志分析与痕迹清理
  7. 关于Android手机CPU不同架构的问题
  8. mysql limit acs_mysql查询操作
  9. 电脑海尔电脑,海尔台式电脑好吗,海尔主机
  10. (转载)今天的她坐在凳子上面的【飞秋】
  11. MVC上传文件受限制
  12. SQL Server Pivot 隐藏group
  13. MySql 实现Row_Number(Partition by)分组函数效果
  14. web-13. 数组和字符串
  15. java 19 -2 异常以及tr...catch()的方法处理异常
  16. 静态成员函数中不允许引用类的非静态成员,但可以访问对象中的非静态成员...
  17. C/C++/JAVA内存布局
  18. 企业如何借助工具分析用户画像
  19. 【目标检测竞赛总结】IEEE UV 2022 “Vision Meets Algae” Object Detection Challenge
  20. 计算机控制op,《计算机控制技术》

热门文章

  1. java定义长方体类cuboid_Java实验指导书
  2. 可视化1300个故事 揭秘6种情节套路
  3. git-bash 的安装配置及其基本使用
  4. 原来我对 MySQL 一无所知
  5. 今天给大家分享使用Scratch做一个连连看的游戏
  6. 【半导体器件数值模拟之仓田卫篇】
  7. 上海贝尔阿尔卡特移动通信系统有限公司
  8. luncene.NET 实现全文检索,模糊搜索
  9. 百度搜索URL中的参数都是什么
  10. 4g dtu透传模块