热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

书籍《编写可读代码的艺术》学习

读书笔记——编写可读代码的艺术序.本书主要内容简化命名、注释和格式的方法,使每行代码都言简意赅梳理程序中的循环、逻辑和变量来减小复杂度并清理思路在函数级别解决问题,




读书笔记——编写可读代码的艺术
序.本书主要内容

简化命名、注释和格式的方法,使每行代码都言简意赅
梳理程序中的循环、逻辑和变量来减小复杂度并清理思路
在函数级别解决问题,例如重新组织代码块,使其一次只做一件事
编写有效的测试代码 ,使其全面而简洁,同时可读性更高



第一章 代码应当易于理解

1.可读性基本定理

关键思想:代码的写法应当使别人理解它所需的时间最小化。


2.代码总是越少越好吗

在这里插入图片描述


第一部分 表面层次的改进

在这里插入图片描述


第二章 把信息装到名字里

无论是命名变量、函数还是类,都可以使用很多相同的原则。我们喜欢把名字当做一条小小的注释。尽管空间不大,但选择一个好名字可以让它承载很多信息。



关键思想
把信息装入名字中


我们在程序中见到的很多名字都很模糊,例如tmp。就算是看上去合理的词,如size或者get,也都没有装入很多信息。本章会告诉你如何把信息装到名字中。
本章分成6个专题


  • 选择专业的词
  • 避免泛化的名字(或者说要知道什么时候使用它)
  • 用具体的名字代替抽象的名字
  • 使用前缀或者后缀给名字附带更多信息
  • 决定名字的长度
  • 利用名字的格式来表达含义

2.1 选择专业的词

“把信息装入名字中”包括要选择非常专业的词,并且避免使用“空洞”的词。
在这里插入图片描述
在这里插入图片描述


2.2 避免像tmp和retval这样泛泛的名字

在这里插入图片描述


2.3 用具体的名字代替抽象的名字

在这里插入图片描述


2.4 为名字附带更多信息

在这里插入图片描述


2.5 总结

在这里插入图片描述


第三章 不会误解的名字

关键思想:
要多问自己几遍:“这个名字会被别人解读成其他的含义吗?”要仔细审视这个名字。


在这里插入图片描述


3.1 推荐使用min和max来表示(包含)极限

在这里插入图片描述

MAX_ITEMS_IN_CART = 10;
MAX_C0MMODITY_IN_CART = 10;
private static final Integer MAX_ITEMS_IN_CART = 10;

3.2 推荐用first和last来表示包含的范围

在这里插入图片描述


3.3 推荐用begin和end来表示包含/排除范围


3.4 给布尔值命名



当为布尔变量或者返回布尔值的函数选择名字时,要确保返回true和false的意义明确


在这里插入图片描述



使用 is、has 、can 或 should 这样的词,可以把布尔值变得更加明确
最后,最好避免使用反义名字,例如 不要用:
bool disable_ssl = false;
而使用
bool use_ssl = true;



3.5 与使用者的期望相匹配



有些名字之所以会让人误解是因为用户对它们的含义有先入为主的印象,就算你的本意并非如此。在这种情况下,最好放弃这个名字而改用一个不会让人误解的名字。


在这里插入图片描述


3.6 总结



不会误解的名字是最好的名字,阅读你代码的人应该理解你的本意,并且不会有其他的理解。遗憾的是很多英语单词在用来编程的时候是多义性的,如filter、length和limit
在决定使用一个名字前要吹毛求疵一点,想象一下这个名字是否会被误解为其他意思。



第四章 审美

  1. 使用一致的布局,让读者很快就习惯这种风格
  2. 让相似的代码看上去相似
  3. 把相关的代码分组,形成代码块
    在这里插入图片描述


4.1 为什么代码审美这么重要

在这里插入图片描述


4.2 重新安排换行来保持一致和紧凑

把重复的功能/方法抽取出来单独形成一个方法。


4.3 在需要时使用列对齐在这里插入图片描述


4.4 选一个有意义的顺序,始终一致地使用它

在这里插入图片描述
在这里插入图片描述


4.5 把声明按块组织起来

在这里插入图片描述


4.6 把代码分成“段落”

在这里插入图片描述


4.7个人风格与一致性



一致的风格比“正确”的风格更重要



4.8 总结

在这里插入图片描述


第五章 该写什么样的注释

关键思想
注释的目的是尽量帮助读者了解得和作者一样多



5.1 什么不需要注释

不要为那些从代码本身就能快速推断的事实写注释


5.2 不要为了注释而注释


5.3 不要给不好的名字加注释–应该把名字改好



好代码>坏代码+好注释



5.4 记录你的思想

在这里插入图片描述


5.5 加入“导演评论”

在这里插入图片描述


5.6 为代码中的瑕疵写注释

代码始终在演进,并且在这个过程中肯定有瑕疵。不要不好意思把这些瑕疵记录下来。
例如,当代码需要改进时:
// TODO: 采用更快算法
或者当代码没有完成时:
// TODO(dustin):处理除JPEG以外的图像格式
在这里插入图片描述


5.7 给常量加注释



/** 排期编号自增加key */
private final static String SCHEDULE_SN = “learning:course:course_schedule_code”;



5.8 公布可能得陷阱

当为一个函数或者类写文档的时,可以问自己这样的问题,“这段代码有什么出人意料的地方?会不会被误用?”基本就是说你需要“未雨绸缪”,预料到别人使用你的代码有什么问题。
在这里插入图片描述


5.9 总结

在这里插入图片描述


第六章 写出言简意赅的注释

核心思想
注释应该有很高的信息/空间率



6.1 让注释更加紧凑

在这里插入图片描述


6.2 避免使用不明确的代词


6.3 精确地描述函数的行为


6.4 声明代码的意图


6.5 采用信息含量高的词

在这里插入图片描述


6.6 总结

在这里插入图片描述


第七章 把控制流变得易读

把条件、循环以及其他对控制流的改变做的越“自然”越好。运用一种方式使读者不用停下来重读你的代码



7.1 条件参数中参数的顺序

在这里插入图片描述
在这里插入图片描述


7.2 if/else语句块的顺序

在这里插入图片描述


第八章 拆分超长的表达式



把你超长的表达式拆分成更容易理解的小块



8.1 用做解释的变量

在这里插入图片描述


8.2 总结变量

在这里插入图片描述


8.3 使用摩根定理

在这里插入图片描述


8.4 滥用短路逻辑

// TODO


附录

1.链接: https://pan.baidu.com/s/1SHlVgqAEgnlj_kP_67U3rw?pwd=oin4 提取码: oin4







推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Explain如何助力SQL语句的优化及其分析方法
    本文介绍了Explain如何助力SQL语句的优化以及分析方法。Explain是一个数据库SQL语句的模拟器,通过对SQL语句的模拟返回一个性能分析表,从而帮助工程师了解程序运行缓慢的原因。文章还介绍了Explain运行方法以及如何分析Explain表格中各个字段的含义。MySQL 5.5开始支持Explain功能,但仅限于select语句,而MySQL 5.7逐渐支持对update、delete和insert语句的模拟和分析。 ... [详细]
  • 本文介绍了如何通过维持两个堆来获取一个数据流中的中位数。通过使用最大堆和最小堆,分别保存数据流中较小的一半和较大的一半数值,可以保证两个堆的大小差距为1或0。如果数据流中的数量为奇数,则中位数为较大堆的最大值;如果数量为偶数,则中位数为较大堆的最大值和较小堆的最小值的平均值。可以使用优先队列来实现堆的功能。本文还提供了相应的Java代码实现。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有