第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> 笔记二 (上)的更多相关文章

  1. <The Art of Readable Code> 笔记二 (下)

    第1章  封装信息到名字 (Packing information into names) 4  附加额外信息 1)  encode value type 对于某些变量,附加额外的信息可以让人更好的理 ...

  2. <The Art of Readable Code> 笔记一

    第1章  代码应易理解 (Code should be easy to understand) 基本原则:好的代码,能够减少 “别人” 理解它的时间. “别人” 不仅指的是 “其它人”,也可能是 “以 ...

  3. 读书笔记之《The Art of Readable Code》

    <The Art of Readable Code>- Dustin Boswell, Trevor Foucher    O'Reilly出版 整体认知:这本书写得很好,每一章后面的总结 ...

  4. A book to recommend: The art of readable code

    我最喜欢的一本书 - 教我如何写可读的代码 Two month fan of the book, from August - Oct. 2014; and then, started to pract ...

  5. werkzeug源码阅读笔记(二) 上

    因为第一部分是关于初始化的部分的,我就没有发布出来~ wsgi.py----第一部分 在分析这个模块之前, 需要了解一下WSGI, 大致了解了之后再继续~ get_current_url()函数 很明 ...

  6. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  7. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  8. Linux内核学习笔记二——进程

    Linux内核学习笔记二——进程   一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...

  9. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX【转】

    本文转载自:http://www.cnblogs.com/52php/p/5681751.html 四.更好一点的Hello World 没有最好,只有更好 从本小节开始,后面所有的构建我们都将采用  ...

随机推荐

  1. 关于 DP 的一些题目

    DP 是真的好玩. 口胡一段话题解: DP 题集 1 DP 题集 2

  2. zabbix-python api(一)

    获取zabbix token #!/usr/bin/env python #coding=utf-8 import json import urllib2 def Gettoken(server_ip ...

  3. Redis学习篇(二)之Hash类型及其操作

    HSET 作用: 将哈希表key中的域field设置成指定的value 语法:HSET key field value HSET userinfo name 'zhangsan' HSET useri ...

  4. BZOJ3289[JZYZOJP2018]: Mato的文件管理 莫队+树状数组+离散化

            描述 Description     Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的, ...

  5. BZOJ3619 [Zjoi2014]璀灿光华 构造+dfs

    题意:有一个\(a^3\)个小正方体组成的大正方体,其中有n个正方体会向上下左右前后六个方向中的一个发出光,正方体是透光的,被照亮的正方体有个美丽值\(g_{i}\),给出正方体的相邻关系,问美丽值之 ...

  6. tarjan算法+缩点--cojs 908. 校园网

    cojs 908. 校园网 ★★   输入文件:schlnet.in   输出文件:schlnet.out   简单对比时间限制:1 s   内存限制:128 MB USACO/schlnet(译 b ...

  7. Codeforces Round #348 (VK Cup 2016 Round 2, Div. 2 Edition) A. Little Artem and Presents 水题

    A. Little Artem and Presents 题目连接: http://www.codeforces.com/contest/669/problem/A Description Littl ...

  8. Educational Codeforces Round 10 C. Foe Pairs 水题

    C. Foe Pairs 题目连接: http://www.codeforces.com/contest/652/problem/C Description You are given a permu ...

  9. PAT甲级1095. Cars on Campus

    PAT甲级1095. Cars on Campus 题意: 浙江大学有6个校区和很多门.从每个门口,我们可以收集穿过大门的汽车的进/出时间和车牌号码.现在有了所有的信息,你应该在任何特定的时间点告诉在 ...

  10. hihocoder 1523:数组重排2

    题目链接 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个1-N的排列A1, A2, ... AN,每次操作小Hi可以选择一个数,把它放到数组的最左边. 请计算小 ...