<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 没有最好,只有更好 从本小节开始,后面所有的构建我们都将采用 ...
随机推荐
- android 程序执行linux命令注意事项
一:问题描述 在已经root过的android设备下,app执行一个linux命令,app需要获取su权限,在某些android主板下会出现异常, Command: [su] Working D ...
- 中国IT职业培训市场经历的几波浪潮,未来的浪潮又是那一波?
第一波 电脑普及性培训时代 2000年至2003年左右,中国正处于PC计算机普及阶段,而IT职业教育也刚开始兴起,这一波浪潮主要以计算机办公自动化.平面设计.计算机硬件维修.为主:几家大的IT培训机构 ...
- 栈stack(1):栈的数组实现
定义 栈(stack),是一个只允许在表尾端进行删除插入操作的线性表,是一种后进先出(LIFO,last in first out)的数据结构. 因此,对于栈来说,我们规定进行删除插入操作的表尾端称为 ...
- 【Zookeeper】源码分析之服务器(一)
一.前言 前面已经介绍了Zookeeper中Leader选举的具体流程,接着来学习Zookeeper中的各种服务器. 二.总体框架图 对于服务器,其框架图如下图所示 说明: ZooKeeperServ ...
- C语言位操作的算法
1.头文件 #ifndef _INC_BITOPERATION #define _INC_BITOPERATION #endif /* 封装了所有的位操作运算 */ #include<stdio ...
- json小结和fastjson包的实际json操作
工作中,需要处理与另一方系统数据交换的问题,采用的是调用远程接口的方法,数据格式选择的是json,今天就来聊一聊json,主要分析json数据和java Bean之间的转换问题. 一.json是什么 ...
- SuperSocket 最基础入门
---恢复内容开始--- SuperSocket 是什么? 首先我们明确一下SuperSocket 本质是什么? 网络框架 ! ok , 那么我们直接上上官网,作者已经开源到Github,可以做两件 ...
- weex Mac开发环境
安装: 1.java的jdk下载和安装 1-1.下载.安装:省略 1-2.配置 第一步:命令行内输入touch .bash_profile命令,生成.bash_profile的隐藏配置文件,用于配置j ...
- Struts2-整理笔记(一)介绍、搭建、流程、详解struts.xml
Struts2是一种前端的技术框架 替代Servlet来处理请求 Struts2优势 自动封装参数 参数校验 结果的处理(转发|重定向) 国际化 显示等待页面 表单的防止重复提交 搭建框架:导 ...
- javamelody 使用
javamelody 扩展API如何获取监控参数 https://github.com/javamelody/javamelody/wiki/ExternalAPI#json
