<The Art of Readable Code> 笔记二 (下)
第2章 封装信息到名字 (Packing information into names)
2.4 附加额外信息
1) encode value type
对于某些变量,附加额外的信息可以让人更好的理解,比如,一个16进制的变量,显然 hex_id 要比 id 更为贴切
string id; // Example: "af84ef845cd8"
string hex_id;
2) encode value units
下面的 JavaScript 代码,乍看没有任何问题,但实际上 getTime() 返回值的单位是 ms 而不是 s
var start = (new Date()).getTime(); // top of the page
...
var elapsed = (new Date()).getTime() - start; // bottom of the page
document.writeln("Load time was: " + elapsed + " seconds");
将 _ms 作为后缀加到变量的后面,则会使代码变得更为清晰
var start_ms = (new Date()).getTime(); // top of the page
...
var elapsed_ms = (new Date()).getTime() - start_ms; // bottom of the page
document.writeln("Load time was: " + elapsed_ms / 1000 + " seconds");
除了时间以外,还有一些别的单位如下表所示:
| Fucntion parameter | Renaming parameter to encode units |
| Start (int delay) | delay -> delay_secs |
| CreateCache (int size) | size -> size_mb |
| ThrottleDownload(float limit) | limit -> max_kbps |
| Rotate (float angle) | angle -> degrees_cw |
3) encode other attributes
如上述漫画所示,一些有关安全的变量命名,也常常需要一些额外的信息
| Situation | Variable name | Better name |
| A password is in "plaintext" and should be encrypted before further processing | password | plaintext_passord |
| A user-provided comment that needs escaping before being displayed | comment | unescaped_comment |
| Byte of html have been converted to UTF-8 | html | html_utf8 |
| Incoing data has been "url encoded" | data | data_urlenc |
2.5 长名长域,短名短域
1) 短名短作用域
变量 m 并没有封装任何信息,但是因为只在 if 作用域内有效,所以并不对妨碍代码的理解
if (debug) {
map<string,int> m;
LookUpNamesNumbers(&m);
Print(m);
}
2) 善用缩写
当变量名实在太长时,可考虑缩写,其使用原则就是:新加入的团队成员,也能够理解该缩写的意思
例如,evaluation 常缩写为 eval,document 可缩写为 doc,string 缩写为 str
3) 去掉无用词
比如,ToString() 优于 ConvertToString(),ServeLoop() 也比 DoServeLoop() 简洁
2.6 使用大写或下划线
在谷歌 C++ Style Guide 中,成员变量名字后面都带有下划线 "_";常量的命名形式为 kConstantName,以便和 #define MACRO_NAME 宏区分开来;类名一般是各个首字母大写,同样成员函数名也是如此
static const int kMaxOpenFiles = ;
class LogReader {
public:
void OpenFile(string local_file);
private:
int offset_;
DISALLOW_COPY_AND_ASSIGN(LogReader);
};
<The Art of Readable Code> 笔记二 (下)的更多相关文章
- <The Art of Readable Code> 笔记二 (上)
第2章 封装信息到名字 (Packing information into names) 2.1 use specific words GetPage() 不如 FetchPage() 和 Dow ...
- <The Art of Readable Code> 笔记一
第1章 代码应易理解 (Code should be easy to understand) 基本原则:好的代码,能够减少 “别人” 理解它的时间. “别人” 不仅指的是 “其它人”,也可能是 “以 ...
- 读书笔记之《The Art of Readable Code》
<The Art of Readable Code>- Dustin Boswell, Trevor Foucher O'Reilly出版 整体认知:这本书写得很好,每一章后面的总结 ...
- A book to recommend: The art of readable code
我最喜欢的一本书 - 教我如何写可读的代码 Two month fan of the book, from August - Oct. 2014; and then, started to pract ...
- werkzeug源码阅读笔记(二) 下
wsgi.py----第二部分 pop_path_info()函数 先测试一下这个函数的作用: >>> from werkzeug.wsgi import pop_path_info ...
- Docker学习笔记二(linux下安装Docker)
Docker学习笔记二(linux下安装Docker) 1.在线安装linux Docker 这种方式首先要保证linux 环境下可以上网,当然,小编是在自己的电脑上安装了虚拟机,在虚拟机上安装了,l ...
- 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX【转】
本文转载自:http://www.cnblogs.com/52php/p/5681751.html 四.更好一点的Hello World 没有最好,只有更好 从本小节开始,后面所有的构建我们都将采用 ...
随机推荐
- poj 3168 Barn Expansion 几何yy
题链:http://poj.org/problem? id=3168 Barn Expansion Time Limit: 1000MS Memory Limit: 65536K Total Su ...
- [数字图像处理]常见噪声的分类与Matlab实现
1.研究噪声特性的必要性 本文的内容主要介绍了常见噪声的分类与其特性. 将噪声建模,然后用模型去实现各式各样的噪声. 实际生活中的各种照片的老化,都能够归结为下面老化模型. 这个模型非常easy,也能 ...
- Winform开发框架中工作流模块的表设计分析
在较早博客随笔里面写过文章<Winform开发框架之简易工作流设计>之后,很久没有对工作流部分进行详细的介绍了,本篇继续这个主题,详细介绍其中的设计.实现及效果给大家,这个工作流在好几年前 ...
- cookie和session(一)
先来谈谈我对session和cookie的理解,事实上,只要你去面试web开发,面试官十有八九会问这个问题. cookie和session经常被放在一起问,其实在我看来这两个东西完全是两个不一样的. ...
- JavaSe:UncaughtExceptionHandler
Java中,出现对于异常的处理,通常是使用try{}catch()来捕获处理的.但是在使用trycatch时,未必会将所有的异常都捕获到,所以方法声明时可以有throws xxxException. ...
- Python:list 和 array的对比以及转换时的注意事项
Python:list 和 array的对比以及转换时的注意事项 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-6-4 ...
- springboot 项目maven 打包错误
Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.6.RELEASE:repackage ...
- Eclipse Maven构建WebApp项目资源目录显示不全的原因与解决方式
一.问题展示 1.Eclipse在使用Maven构建WebApp项目的时候,首先Maven的安装和配置都没有问题的,但是构建项目之后,Maven项目要求的几个必须要有的资源目录显示不了: 问题如下图: ...
- 工作随笔——spring异步处理@Async使用笔记
@Async使用笔记 必须是public方法 必须是非static方法 方法调用的实例必须由spring创建和管理 代码示例如下: // 创建Foo类@Component class Foo { @A ...
- JMeter脚本获取变量名、检验字符串值
说明: 脚本中获取变量值用vars.get("变量名"); 校验String类型的值使用String.equals("字符串值"),而不能用String==&q ...
