<The Art of Readable Code> 笔记二 (上)
第2章 封装信息到名字 (Packing information into names)
2.1 use specific words
GetPage() 不如 FetchPage() 和 DownloadPage() 更具体; BinaryTree 类中的 Size() 不如 Height()、NumNodes() 或 MemoryBytes() 更明确
class BinaryTree {
int Size();
...
}
同理,Thread 类中的 通常是 Kill(),而不是 Stop(),并且一般 Pause() 和 Resume() 成对出现
class Thread {
void Stop();
...
}
一些常用词语的替代词
send | deliver, dispatch, announce, distribute, route |
find | search, extract, locate, recover |
start | launch, create, begin, open |
make | create, set up, build, generate, compose, add, new |
2.2 avoid generic names
1) retval
下面的 retval 求的是 “平方和”,因此,用 sum_squares 代替更为合适
var euclidean_norm = function (v) {
var retval = 0.0;
for (var i = 0; i < v.length; i += 1)
retval += v[i] * v[i];
return Math.sqrt(retval);
};
2) tmp
tmp 合适的例子
if (right < left) {
tmp = right;
right = left;
left = tmp;
}
但是,下面这个 tmp 就不如改为 user_info 了
String tmp = user.name();
tmp += " " + user.phone_number();
tmp += " " + user.email();
...
template.set("user_info", tmp);
同样,下面的 tmp_file 也比 tmp 更为明确
tmp_file = tempfile.NamedTemporaryFile()
...
SaveDate(tmp_file, ...)
3) i, j, k
i, j, k 非常容易混淆,不如改为 clubs_i, members_i, users_i 方便,再次简化为 ci, mi, ui
for (int i = ; i < clubs.size(); i++)
for (int j = ; j < clubs[i].members.size(); j++)
for (int k = ; k < users.size(); k++)
if (clubs[i].members[k] == users[j])
cout << "user[" << j << "] is in club[" << i << "]" << endl;
2.3 use concrete names
例如,当监听端口时, ServerCanStart() 是抽象的,不如 CanListenOnPort() 具体
之前的谷歌规范中,为了避免 c++ 编译器自动生成拷贝构造函数和赋值算子,使用了如下宏:
class ClassName {
private:
DISALLOW_EVIL_CONSTRUCTORS(ClassName);
public:
...
};
其定义为:
#define DISALLOW_EVIL_CONSTRUCTORS(ClassName) \
ClassName(const ClassName&); \
void operator=(const ClassName&);
实际上,这个名字并不好,现在已经改为了 DISALLOW_COPY_AND_ASSIGN(ClassName)
c++11 中,由于 delete 关键字的引入,已经解决了此问题,无须使用该宏了。可参见 C++11 之 delete 和 default
<The Art of Readable Code> 笔记二 (上)的更多相关文章
- <The Art of Readable Code> 笔记二 (下)
第1章 封装信息到名字 (Packing information into names) 4 附加额外信息 1) encode value type 对于某些变量,附加额外的信息可以让人更好的理 ...
- <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----第一部分 在分析这个模块之前, 需要了解一下WSGI, 大致了解了之后再继续~ get_current_url()函数 很明 ...
- 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- Linux内核学习笔记二——进程
Linux内核学习笔记二——进程 一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...
- 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX【转】
本文转载自:http://www.cnblogs.com/52php/p/5681751.html 四.更好一点的Hello World 没有最好,只有更好 从本小节开始,后面所有的构建我们都将采用 ...
随机推荐
- [Codeforces #514] Tutorial
Link: Codeforces #514 传送门 很简单的一场比赛打崩了也是菜得令人无话可说…… D: 一眼二分,发现对于固定的半径和点,能包含该点的圆的圆心一定在一个区间内,求出区间判断即可 此题 ...
- Nginx 502 Bad Gateway 解决方法
proxy_next_upstream error timeout invalid_header http_500 http_503;或者尝试设置:large_client_header_buffer ...
- UVA 10531 Maze Statistics 迷宫统计 迷宫插头DP 四联通 概率
题意: 有一个N*M的图,每个格子有独立概率p变成障碍物.你要从迷宫左上角走到迷宫右下角.求每个格子成为一个有解迷宫中的障碍物的概率.N <= 5,M <= 6 分析: 这真是一道好题,网 ...
- VMware中网络设置之host-only
有了前面一篇的NAT的网络设置,本文就显得非常简单了.同样图文结合的步骤: 1.设置host-only模式. 2.设置linux虚拟机的静态IP.进入linux系统,点击主菜单---系统设置---网络 ...
- Java容器-引入Guava类库
目录 1.只读设置 2.函数式编程+组合式编程 3.约束条件 4.集合操作(并集.差集.交集) 代码实现 1.只读设置 public static void main(String [] args){ ...
- Java解读内存,优化编程
1.别用new Boolean 在很多场景中Boolean类型是必须的,比如JDBC中boolean类型的set与get都是通过Boolean封装传递的,大部分ORM也是用Boolean来封装bool ...
- 用C++/CLI搭建C++和C#之间的桥梁(一)—— 简介
C#和C++是非常相似的两种语言,然而我们却常常将其用于两种不同的地方,C#得益于其简洁的语法和丰富的类库,常用来构建业务系统.C++则具有底层API的访问能力和拔尖的执行效率,往往用于访问底层模块和 ...
- busdog is a filter driver for MS Windows (XP and above) to sniff USB traffic.
https://code.google.com/p/busdog/ busdog is a filter driver for MS Windows (XP and above) to sniff U ...
- php中的var_dump()方法的详细说明
首先看看实例: <?PHP$a = "alsdflasdf;a";$b = var_dump($a);echo "<br>";//var_du ...
- Maven之——仓库(下)
Maven之--仓库(下) 1. 快照版本号 Maven世界中不论什么项目或者构件都有自己的版本号. Maven在构建时检測到构件是快照版本号.而且当前构件不是最新版本号的时候.就会自己主动更新 ...