代码整洁vs代码肮脏
写出整洁的代码,是每个程序员的追求。《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.为什么需要代码 代码是需求的实现,呈现了需求的细节. 编程就是将需求明确到机器可以执行的细节程度,而这种规约就是代码. 总之:代码是我们最终用来表达需求的语言. 2.糟糕的代码 不客气的说:糟糕的 ...
- 什么是整洁的代码?什么是肮脏的代码?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://rrd.me/ekN6H 命名的艺术 注释 函 ...
- 整洁的代码 VS 肮脏的代码?
本文来源:cnblogs.com/xybaby/p/11335829.html 序 写出整洁的代码,是每个程序员的追求.<clean code>指出,要想写出好的代码,首先得知道什么是肮脏 ...
- 不能将紧实的字段 绑定到_代码整洁之道【笔记】
一.整洁代码 A.混乱的代价 1.有些团队在项目初期进展迅速,但有那么一两年的时间却慢去蜗行.对代码的每次修改都影响到其他两三处代码 2.花时间保持代码整洁不但有关效率,还有关生存 3.程序员遵从不了 ...
- 【苦练基本功】代码整洁之道 pt2(第4章-第6章)
代码整洁之道 pt2(第4章-第6章) 4 注释 4.1 注释不能美化糟糕的代码 4.2 用代码来阐述 4.3 好注释 4.3.1 法律信息 4.3.2 提供信息的注释 4.3.3 对意图的解释 4. ...
- 代码整洁之道精华——第十四章 逐步改进
阅读本文有两种原因:第一,你是个程序员:第二,你想成为更好的程序员.你如果想成为更好的程序员,那就请细细品味文章内容,它绝不会让你失望. 代码整洁之道教给大家如何编写整洁的代码,而不仅仅是能运行的代码 ...
- 《代码整洁之道》——(5)对象和数据结构
<代码整洁之道>--(5)对象和数据结构 5.1.数据抽象 隐藏实现并非只是在变量之间放上一个函数层简单.隐藏实现关乎抽象!类并不简单的用取值器和赋值器将其变量推向外间,而是曝露抽象接口, ...
- 代码整洁之道核心记要(一)
代码整洁之道核心记要 0. 简介 1. 前言 2. 详解 1. 命名 2. 函数 3. 对象与数据结构 感悟 代码整洁之道是鲍勃大叔的经典作品.这本书主要介绍鲍勃大叔的整洁代码的方法,如何写出好代码, ...
- 代码整洁之道 读书笔记
第1章 整洁代码 1.1 要有代码 1.2 糟糕的代码 稍后等于永不 1.3 混乱的代价 假设前期不注意.后期的加入代码.改动效率都很低 1.3.1 华丽新设计 1.3.2 态度 1.3.3 ...
最新文章
- jQuery EasyUI DataGrid 分页 FOR ASP.NET
- 13.执行外部命令subprocess
- Maven(八)Eclipse创建Web项目(复杂方式)
- 如何进行软件测试需求分析
- html 显示代码块,使用Pre在文章中显示代码块 - 文章教程
- 配置Tomcat的日志系统
- P4831-Scarlet loves WenHuaKe【组合数学】
- 简易有WEB文件服务器,Python实现简易版的Web服务器(推荐).pdf
- 利用xlwt写excel并进行单元格的合并
- 汽车和山羊问题matlab仿真_Matlab----无人机集群对抗中的关键问题和仿真平台(开发中)案例...
- gps test free android,GPSTest | F-Droid - Free and Open Source Android App Repository
- 软件工程学习进度第六周暨暑期学习进度之第六周汇总
- DataGridView绑定list的注意事项
- Win10(Win7)安装医学Mimics16.0和Mimics19软件安装教程
- 模拟退火算法(SA)
- 解决magicdraw16.8无法在win8.1下破解使用
- win10浏览器闪退_win10系统打开ie11浏览器出现闪退的两种解决方法
- 蜂鸣器驱动电路中二极管的作用
- 【方向盘】蚂蚁金服上市了,我不想努力了
- SpringMVC单文件上传、多文件上传、文件列表显示、文件下载