您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

关于代码整洁的总结和笔记

时间:2019-07-04 10:02:48  来源:  作者:
关于代码整洁的总结和笔记

 

前言

《代码整洁之道》在业内有很高的知名度,被诸多前辈推荐给后来者阅读。本书以循序渐进改造一个小程序的方式,演示了一个程序可能的各种设计(在代码层面)。手把手教你该怎么设计代码,为何要这样设计,这样设计的好处是什么。通过一周的阅读,总结了如下要点。

一 函数

所有的编程都是从HellWorld这个小函数开始的,学会设计函数非常重要

  1. 函数要。短才方便阅读、维护和设计。(每个人都经历过读不懂自己代码的尴尬)
  2. 函数只做一件事。依照单一职责原则设计函数。一个函数可以:流程控制,逻辑判断,改变变量状态,以及做运算,或者调用多个下一抽象级的函数。
  3. 函数分解成多个抽象层级设计,高层函数只调用下次层函数,呈树状图,层层封装。
  4. 函数不应该有标识参数(除了作为API的函数),这意味着函数有至少两种执行方式,违反了第2条原则。而且明显能拆成多个小函数。
  5. 函数参数越少越好有,多个参数应该封装成一个整体传入的。如果逻辑上不是一个整体,则函数肯定能被拆成多个小函数然后被分别调用。第4条标识参数可以封装进整体传入函数,而不是直接作为函数的参数
  6. 函数真的最好只做一件事,不要为了一时方便顺手加几行代码。如登录验证时,函数用来验证username和password,在验证之后顺便给用户初始化些其他东西。会导致这个函数在其他时候无法验证用户信息。
  7. 底层函数不应该改变参数状态,如果想改变某类的状态,就把该函数加入该类,让它自己调用函数。如:把改变类x的状态的函数调用addFooter(x),改为x.addFooter()。
  8. 函数不要返回错误码,这需要你有错误码的枚举类,并且违反了开放封闭原则(你需要加入新错误码来扩展新错误),直接抛出异常就好了。(可以通过继承父异常来扩展)。但是实际上错误码的应用不比异常少,而且异常也会导致代码的臃肿。
  9. 函数名称应该描述清楚函数作用,避免频繁去看文档,这对于短小的函数来说不难办到,如果很难命名可能需要思考函数是否有依照以上原则设计(你一个函数可能做了很多事情)。并且名称的命名应该不容易与其他函数名称形成混淆。如:add()在calculator中意思是加,而在List中就不应该用add表示插入集合了,应该用insert或Append。简单来说就是一个概念对应一个词,并且始终如一。

二 格式

每个人都有自己的编码风格,书中总结了一些JAVA及其他语言的建议

  1. 好的格式应该由小且精的代码片段(函数)组成
  2. 封包代码,导包代码,成员变量,函数方法。都用空行隔开,形成分开的代码块
  3. 函数按调用顺序从上到下排列,类变量在顶端声明,方法变量在使用前声明
  4. 一行代码不超过100个,同一行的计算可以按先后顺序用空格隔开,如:
  5. 100 * 732 / (2+3) * (5-1)
  6. 小括号内的运算全都挤在了一起,其他运算都有空格隔开,很容易看出运算顺序
  7. 缩进代表了一种包含关系。Java没有强制要求,但是Python就是用缩进表示包含。
  8. 说了这么多最后总结道:老大规定用啥格式就用啥格式

三 注释

其实注释写了后,看的最多的还是自己

  1. 好代码只需要少量注释,代码就能表达意图——回到之前的内容,这要求我们写小且精的函数。(但这不是你不写注释的理由)
  2. 好的注释应该是这样的。如:对抽象意图或者深远意义的解释(如我这个函数为啥用这个方法实现);阐述长且难读的函数(这种难读不是因为代码写得烂,而是业务逻辑复杂);警示一些关键重要的部分(这些部分一般是函数会改变某些数据实体);TODO注释提醒并告知未来要做的事;学着公共API的JAVADOC写就是好注释(虽然也有少数烂注释);
  3. 烂的注释往往是这样的。如:多余的注释(简单函数强行加上注释,读源码会比注释更快);误导的注释(注释本来就是错的,可能源自你更新了代码没更新注释——小函数特别可能出现这个问题);注释掉的代码(你为何不删了代码?);废话太多的注释(语文是体育老师教的)。

四 类

书中对于函数的设计其实和类的设计思想是类似的,所以类应该功能单一且小巧,越小耦合性越低,最后用门面模式组合起来向外提供API就好了

五 系统

系统整体结构的设计

  1. 把系统的整体构造和业务使用分开。不要让构造影响使用,也不要让程序的运行反过来影响构造。这也是Spring这么应用广泛的原因之一,Spring Core就是个类容器。
  2. 把业务逻辑和检查或日志方案分离,不然纠缠在一起的代码会很难看懂和修改。Spring AOP也解决了这个问题。

六 测试

测试不仅仅是测试小姐姐的事情

  1. 测试函数(方法)也应该短小(如果函数原本够小的话测试函数自然会小)
  2. 每个类最好都测试下,测试时间会比以后debug时间少。从底层函数一点点测上去,以后debug能迅速定位。
  3. 测试类应该保存下来,方便每次修改后进行测试


Tags:代码   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言几乎所有.NET序列化程序的实现基础都是反射。下列代码是Newtonsoft.Json的实现:protectedvirtualJsonPropertyCreateProperty(MemberInfomember,MemberSerializationmemb...【详细内容】
2021-12-28  Tags: 代码  点击:(2)  评论:(0)  加入收藏
在SEO优化中,最重要的评估之一就是确定网站上存在哪些HTTP状态代码。这些代码可能会变得很复杂,成为一个难题,必须先解决这些难题,然后才能完成其他任务。例如,如果你放置的页面...【详细内容】
2021-12-24  Tags: 代码  点击:(5)  评论:(0)  加入收藏
1、通过条件判断给变量赋值布尔值的正确姿势// badif (a === 'a') { b = true} else { b = false}// goodb = a === 'a'2、在if中判断数组长度不为零...【详细内容】
2021-12-24  Tags: 代码  点击:(6)  评论:(0)  加入收藏
前言本文提供将视频调整分辨率的Python代码,一如既往的实用主义。环境依赖ffmpeg环境安装,可以参考我的另一篇文章: windows ffmpeg安装部署_阿良的博客-CSDN博客ffmpy安装:pip...【详细内容】
2021-12-14  Tags: 代码  点击:(15)  评论:(0)  加入收藏
大家好, 我是林路,今天就给大家介绍Python代码都是用的什么编辑器写的?Jupyter Notebook ,没有Pycharm,没有Vscode,没有Sublime text。 只有一款工具:Jupyter Notebook 。工欲善其...【详细内容】
2021-12-09  Tags: 代码  点击:(27)  评论:(0)  加入收藏
在这篇文章中,我将与你分享一些关于JS的技巧,可以提高你的JS技能。1.避免if过长如果判断值满足多个条件,我们可能会这么写:if (value === 'a' || value === 'b'...【详细内容】
2021-11-17  Tags: 代码  点击:(22)  评论:(0)  加入收藏
一、为什么需要使用内存池在C/C++中我们通常使用malloc,free或new,delete来动态分配内存。一方面,因为这些函数涉及到了系统调用,所以频繁的调用必然会导致程序性能的损耗;另一...【详细内容】
2021-11-17  Tags: 代码  点击:(38)  评论:(0)  加入收藏
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个由百度开源的低代码前端框架——amis...【详细内容】
2021-11-05  Tags: 代码  点击:(68)  评论:(0)  加入收藏
程序员是青春饭,这在国内似乎是公认的。所以很多公司不愿招大龄程序员,很多程序员也“知趣”地及早转型。有的做管理,有的做架构,我还见过改行卖保险的。总之,年龄大了不想敲代码...【详细内容】
2021-10-27  Tags: 代码  点击:(30)  评论:(0)  加入收藏
我们来看看我们拨号键盘除了能打电话还能干什么iphone 的拨号键盘除了用来拨号,其实暗藏代码输入星井06井可以查询手机真实的IMEI码,这个码是独一无二的没有双胞胎 输入星3001...【详细内容】
2021-10-25  Tags: 代码  点击:(78)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条