写出整洁的代码,是每个程序员的追求。《clean code》指出,要想写出好的代码,首先得知道什么是肮脏代码、什么是整洁代码;然后通过大量的刻意练习,才能真正写出整洁的代码。

WTF/min是衡量代码质量的唯一标准,Uncle Bob在书中称糟糕的代码为沼泽(wading),这只突出了我们是糟糕代码的受害者。国内有一个更适合的词汇:屎山,虽然不是很文雅但是更加客观,程序员既是受害者也是加害者。

对于什么是整洁的代码,书中给出了大师们的总结:

Bjarne Stroustrup:优雅且高效;直截了当;减少依赖;只做好一件事
Grady booch:简单直接
Dave thomas:可读,可维护,单元测试
Ron Jeffries:不要重复、单一职责,表达力(Expressiveness)
其中,我最喜欢的是表达力(Expressiveness)这个描述,这个词似乎道出了好代码的真谛:用简单直接的方式描绘出代码的功能,不多也不少。
一、命名的艺术
坦白的说,命名是一件困难的事情,要想出一个恰到好处的命名需要一番功夫,尤其我们的母语还不是编程语言所通用的英语。不过这一切都是值得了,好的命名让你的代码更直观,更有表达力。

好的命名应该有下面的特征:

1.1 名副其实
好的变量名告诉你:是什么东西,为什么存在,该怎么使用

如果需要通过注释来解释变量,那么就先得不那么名副其实了。

1.2 避免误导
不要挂羊头卖狗肉
不要覆盖惯用缩略语
这里不得不吐槽前两天才看到的一份代码,居然使用了 l 作为变量名;而且,user居然是一个list(单复数都没学好!!)

1.3 有意义的区分
代码是写给机器执行,也是给人阅读的,所以概念一定要有区分度。

1.4 使用读的出来的单词
如果名称读不出来,那么讨论的时候就会像个傻鸟

1.5 使用方便搜索的命名
名字长短应与其作用域大小相对应

1.6 避免思维映射
比如在代码中写一个temp,那么读者就得每次看到这个单词的时候翻译成其真正的意义

二、注释
有表达力的代码是无需注释的:The proper use of comments is to compensate for our failure to express ourself in code.

注释的适当作用在于弥补我们用代码表达意图时遇到的失败,这听起来让人沮丧,但事实确实如此。The truth is in the code, 注释只是二手信息,二者的不同步或者不等价是注释的最大问题。

因此,当想要添加注释的时候,可以想想是否可以通过修改命名,或者修改函数(代码)的抽象层级来展示代码的意图。

当然,也不能因噎废食,书中指出了以下一些情况属于好的注释

法务信息
对意图的注释,为什么要这么做
警示
TODO注释
放大看似不合理之物的重要性
其中个人最赞同的是第2点和第5点,做什么很容易通过命名表达,但为什么要这么做则并不直观,特别涉及到专业知识、算法的时候。另外,有些第一感觉“不那么优雅”的代码,也许有其特殊愿意,那么这样的代码就应该加上注释,说明为什么要这样,比如为了提升关键路径的性能,可能会牺牲部分代码的可读性。

最坏的注释就是过时或者错误的注释,这对于代码的维护者(也许就是几个月后的自己)是巨大的伤害,可惜除了code review,并没有简单易行的方法来保证代码与注释的同步。

代码整洁vs代码肮脏相关推荐

  1. 《代码整洁之道》一之整洁代码的必要性

    1.为什么需要代码 代码是需求的实现,呈现了需求的细节. 编程就是将需求明确到机器可以执行的细节程度,而这种规约就是代码. 总之:代码是我们最终用来表达需求的语言. 2.糟糕的代码 不客气的说:糟糕的 ...

  2. 什么是整洁的代码?什么是肮脏的代码?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://rrd.me/ekN6H 命名的艺术 注释 函 ...

  3. 整洁的代码 VS 肮脏的代码?

    本文来源:cnblogs.com/xybaby/p/11335829.html 序 写出整洁的代码,是每个程序员的追求.<clean code>指出,要想写出好的代码,首先得知道什么是肮脏 ...

  4. 不能将紧实的字段 绑定到_代码整洁之道【笔记】

    一.整洁代码 A.混乱的代价 1.有些团队在项目初期进展迅速,但有那么一两年的时间却慢去蜗行.对代码的每次修改都影响到其他两三处代码 2.花时间保持代码整洁不但有关效率,还有关生存 3.程序员遵从不了 ...

  5. 【苦练基本功】代码整洁之道 pt2(第4章-第6章)

    代码整洁之道 pt2(第4章-第6章) 4 注释 4.1 注释不能美化糟糕的代码 4.2 用代码来阐述 4.3 好注释 4.3.1 法律信息 4.3.2 提供信息的注释 4.3.3 对意图的解释 4. ...

  6. 代码整洁之道精华——第十四章 逐步改进

    阅读本文有两种原因:第一,你是个程序员:第二,你想成为更好的程序员.你如果想成为更好的程序员,那就请细细品味文章内容,它绝不会让你失望. 代码整洁之道教给大家如何编写整洁的代码,而不仅仅是能运行的代码 ...

  7. 《代码整洁之道》——(5)对象和数据结构

    <代码整洁之道>--(5)对象和数据结构 5.1.数据抽象 隐藏实现并非只是在变量之间放上一个函数层简单.隐藏实现关乎抽象!类并不简单的用取值器和赋值器将其变量推向外间,而是曝露抽象接口, ...

  8. 代码整洁之道核心记要(一)

    代码整洁之道核心记要 0. 简介 1. 前言 2. 详解 1. 命名 2. 函数 3. 对象与数据结构 感悟 代码整洁之道是鲍勃大叔的经典作品.这本书主要介绍鲍勃大叔的整洁代码的方法,如何写出好代码, ...

  9. 代码整洁之道 读书笔记

    第1章 整洁代码 1.1 要有代码 1.2 糟糕的代码      稍后等于永不 1.3 混乱的代价 假设前期不注意.后期的加入代码.改动效率都很低 1.3.1 华丽新设计 1.3.2 态度 1.3.3 ...

最新文章

  1. jQuery EasyUI DataGrid 分页 FOR ASP.NET
  2. 13.执行外部命令subprocess
  3. Maven(八)Eclipse创建Web项目(复杂方式)
  4. 如何进行软件测试需求分析
  5. html 显示代码块,使用Pre在文章中显示代码块 - 文章教程
  6. 配置Tomcat的日志系统
  7. P4831-Scarlet loves WenHuaKe【组合数学】
  8. 简易有WEB文件服务器,Python实现简易版的Web服务器(推荐).pdf
  9. 利用xlwt写excel并进行单元格的合并
  10. 汽车和山羊问题matlab仿真_Matlab----无人机集群对抗中的关键问题和仿真平台(开发中)案例...
  11. gps test free android,GPSTest | F-Droid - Free and Open Source Android App Repository
  12. 软件工程学习进度第六周暨暑期学习进度之第六周汇总
  13. DataGridView绑定list的注意事项
  14. Win10(Win7)安装医学Mimics16.0和Mimics19软件安装教程
  15. 模拟退火算法(SA)
  16. 解决magicdraw16.8无法在win8.1下破解使用
  17. win10浏览器闪退_win10系统打开ie11浏览器出现闪退的两种解决方法
  18. 蜂鸣器驱动电路中二极管的作用
  19. 【方向盘】蚂蚁金服上市了,我不想努力了
  20. SpringMVC单文件上传、多文件上传、文件列表显示、文件下载

热门文章

  1. Java学习方法浅谈
  2. OpenCV/CUDA—Sobel边缘检测
  3. backlog配置_浅谈tcp socket的backlog参数
  4. 存量混战 一加如何打天下?
  5. 时钟周期和机器周期之间的关系
  6. 达梦DM ETL工具搭建与使用
  7. 云上数据库:从零到壹的实践经验分享
  8. 【学习笔记09】:JavaScript单引号、双引号和反引号的区别
  9. audacity_为教师快速介绍Audacity
  10. vue + XLSX解析excel数据