一、有意义的命名

1.名副其实
选个好名称要花时间,但省下来的时间比花掉的多。注意命名,一旦发现有更好的名称,就换掉旧的。

变量、函数或类的名称应该已经答复了所有的大问题,它该告诉你,它为什么会存在,它做什么事,应该怎么用。如果名称需要注释来补充,那就不算是名副其实。

int d; // elapsed time in days
int elapsedTimeInDays;

选择提现本意的名称能让人更容易理解和修改代码。

2.避免误导
程序员必须避免留下掩藏代码本意的错误线索,避免使用与本意相悖的词。比如首字母缩写命名hp;比如accountList除非是真的list类型。

3.做有意义的区分
以数字系列命名纯属误导,如a1,a2…等。完全没有提供正确信息,没有提供导向作者意图的线索。
废话命名都是冗余,如productInfo和productData,如phoneString,要体现有意义的区分。
状态值判断等应该用枚举常量来体现意图。

4.使用读的出来的名称
如果名称读不出来,讨论的时候就显得很傻。

private Date genymdhms;
private Date generationTimestamp;

5.使用可搜索的名称
对于单字母名称和数字常量,很难在一大片代码中找到。长名称胜于短名称,搜得到的名称胜于自造的,名称长度应与其作用域大小相应。

const int WORK_DAYS_PER_WEEK = 5;

6.名称前缀
代码读的越多,眼中就越没有前缀,只看到名称中有意义的部分,最终,前缀变作了旧代码不入眼的废料。如m_dsc。

7.避免思维映射
不应当让读者在脑中把你的名称翻译为他们熟悉的名称,这种问题经常出现在选择使用问题领域术语还是解决方案领域术语时。如循环变量i、j、k。

8.动静区分
类名或对象名应该是名词或名词短语,方法应当是动词或动词短语。

9.问题领域的名称
只有程序员会读你的代码,所以优先使用计算机术语来命名,其次才是采用涉及问题领域的名称。

10.有意义的语境
可以添加前缀提供语境,这些变量是更大结构的一部分。如:addrFirstName,addrLastName,addrState。

起好名字最难的地方在于需要良好的描述技巧和公用文化背景,做好命名事半功倍。

二、函数

1.短小
尽可能的短小,更方便阅读。

2.只做一件事
函数应该做一件事,做好这件事,只做这一件事。一方面使代码更容易理解,一方面复用性更强了。

3.向下规则
让代码拥有自顶向下的阅读顺序。程序就像是一系列To起头的段落,每一段都描述当前抽象层级,并引用位于下一层级的后续起头段落。

4.不要重复
重复使代码臃肿,尽可能避免重复的出现,可以提取公共代码。

三、注释

1.注释不能美化
注释的恰当用法是弥补我们在用代码表达意图时遭遇的失败。注释存在的越久,离其所描述的代码就越远,因为代码在变动,在演化,而注释不总是随之变动,所以要负责维护注释的准确。
与其花时间编写解释糟糕的代码的注释,不如花时间清理糟糕的代码。

2.好注释

  • 与法律相关的注释,如:版权及著作权声明必须放在每个源文件开头,它应该指向一份标准许可或其他外部文档,而不是把所有条款放到注释中。
  • 提供基本信息的注释,如:方法的参数意义。
  • 对意图的解释,告诉别人想要做什么。
  • 警示,用于警示其他程序员可能会出现某种后果的注释。
  • todo注释,由于某些原因目前还没做的工作,后续清除todo。

四、格式

1.垂直间隔
几乎所有的代码都是从上往下读,从左往右读。每行展现一个表达式或一个句子,每组代码行展示一跳完整的思路,这些思路用空白行区隔开来。如:导入声明和每个函数之间。这条简单的规则极大地影响代码的视觉外观,每个空白行都是一条线索,表示新的独立概念。往下读代码时,你的目光总会停留在空白行之后的那一行。

2.垂直顺序
自上而下的展示函数调用依赖顺序,被调用的函数应该放在执行调用的函数下面,这样就建立了一种自顶向下贯穿代码模块的良好信息流。

3.水平格式
在需要的地方空格以及缩进。

读书笔记(二十三):代码整洁相关推荐

  1. 《深入浅出DPDK》读书笔记(十三):DPDK虚拟化技术篇(加速包处理的vhost优化方案)

    Table of Contents 加速包处理的vhost优化方案 142.vhost的演进和原理 143.Qemu与virtio-net 144.Linux内核态vhost-net 145.用户态v ...

  2. 《How Tomcat Works》读书笔记(二)

    <How Tomcat Works>读书笔记(二) 这是<How Tomcat Works>第一二章的读书笔记.第一张主要写了一个静态资源处理的web服务器,第二章加了对ser ...

  3. 3D游戏设计读书笔记二

    3D游戏设计读书笔记二 一.简答题 • 解释 游戏对象(GameObjects) 和 资源(Assets)的区别与联系.   GameObjects是一个具体的实例,Assets是包括诸多游戏素材的资 ...

  4. 《李元芳履职记》读书笔记二 IT技术管理的沟通与团队建设

    <李元芳履职记>读书笔记二 接一 https://blog.csdn.net/qq_45937199/article/details/103305223 IT技术人员从技术岗走向管理岗,所 ...

  5. oracle直查和call哪个更快,让oracle跑的更快1读书笔记二

    当前位置:我的异常网» 数据库 » <>读书笔记二 <>读书笔记二 www.myexceptions.net  网友分享于:2013-08-23  浏览:9次 <> ...

  6. 《Java编程思想》读书笔记 第十三章 字符串

    <Java编程思想>读书笔记 第十三章 字符串 不可变String String对象是不可变的,每一个看起来会修改String值的方法,实际上都是创建一个全新的String对象,以及包含修 ...

  7. 《Docker 技术入门与实践》-读书笔记二

    <Docker 技术入门与实践>-读书笔记一 <Docker 技术入门与实践>-读书笔记二 一.数据管理 用户在使用 Docker 的过程中,往往需要能查看容器内应用产生的数据 ...

  8. 《Introduction To Modern Cryptography》读书笔记二

    <Introduction To Modern Cryptography>读书笔记二 本笔记纯粹个人读书习惯与相应见解,内容归纳完全出于个人需要与个人局限,如有修改意见(比如哪儿应该是值得 ...

  9. 第一行代码 Android读书笔记(二)

    第一行代码 Android读书笔记 第三章 软件也要拼脸蛋-UI开发的点点滴滴 常用控件的使用方法 详解4种基本布局 自定义控件 最常用和最难用的控件-ListView 更加强大的滚动控件-Recyc ...

  10. 代码整洁之道读书笔记——第一章:整洁代码

    软件质量,不仅仅依赖于项目架构和项目管理,同样重要的是代码质量!!! 序 神在细节之中,其实干什么事都一样,从小到大,一直明白一个道理:细节决定成败! 软件架构在开发中占据重要地位.其次,宏达建筑的最 ...

最新文章

  1. 意外终止_美国留学本科意外终止怎么办?
  2. “最粉嫩”的JVM垃圾回收器及算法,王者笔记!
  3. 反射的基石——Class类
  4. 大页内存(HugePages)
  5. 图论——Tarjan 初步 DFS序+时间戳+欧拉序
  6. struts2+ajax+json使用实例
  7. 为什么Java开发人员都带眼镜 | 程序员搞笑段子合集
  8. 神盾解密工具 之 解密 “ PHP 神盾解密工具 ”
  9. php curl保存位置,php – 使用cURL从URL保存图像
  10. Nginx的Rewrite规则编写
  11. 华为悦盒E6108无线投屏-机顶盒连接wifi-我的盒子-DLNA-手机视频有TV标识-点击TV标识
  12. 公式法求主合取范式和主析取范式的一种思路
  13. 重装系统后有一个磁盘打不开,提示没有权限
  14. 聚会邀请html源码,聚会邀请短信
  15. c语言中用递推法解决渔夫问题,递归、递推 - IT小冰的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. Linux开机启动过程-centos7
  17. 【跨境电商】5款Shopify应用,辅助你的在线商店运营
  18. 新产品Digi XBee RR无线模块迁移指南
  19. 大学计算机引论作业,计算机引论-1计算引论-认识计算机.pdf
  20. 硕士复试自我介绍中英模板

热门文章

  1. Deploy k8s(1.25)
  2. coreldraw铺花纹_CorelDRAW打造漂亮剪纸花纹教程
  3. 安迪·鲁宾支持的猫头鹰实验室刚推出了一款机器人视频会议摄像机
  4. Linux内核分析及内核编程
  5. CTPN CRNN-Pytorch 银行卡号识别
  6. CentOS 7下载地址(ISO文件)安装
  7. keepalived脑裂现象
  8. 【最新款】编程语言2月排行榜结果出炉:最难的语言实至名归!
  9. 每个Java程序员都应该Follow的10个Twitter账号
  10. 如何提高接口自动化测试的有效性覆盖和案例有效性