第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

最新文章

  1. JetBrains注册码计算(IntelliJ IDEA 15.0注册码激活)
  2. 华东交通大学2016年ACM“双基”程序设计竞赛 1009
  3. 2.html5的基本格式
  4. Test,Nginx Hello World Module
  5. [jquery]高级篇--获取div子元素
  6. UVA 10518 How Many Calls?
  7. java IoC
  8. Java基础学习笔记四 Java基础语法
  9. Python3 字符串与hex之间的相互转换
  10. MongoDB调优-查询优化-MongoDB Profiler
  11. android:应用性能优化SparseArray
  12. (转)python WSGI框架详解
  13. layoutSubviews相关总结
  14. 如何获取c:forEach里面点击时候的值
  15. 25+开源的在线购物软件(PHP, JavaScript 和 ASP.Net)
  16. Oracle 12C卸载图文教程
  17. windows兼容方式安装python[转]
  18. 用Eclipse进行远程Debug代码
  19. vscode环境配置
  20. Gradle Goodness: Working with Live Task Collection

热门文章

  1. 给出一列数a1,a2,a3....an,求它们的逆序对数,即有多少个有序对(i,j) 使得iaj,n高达10的6次方
  2. luogu P4137 mex
  3. 【二分查找-最大化平均值】POJ2976 - Dropping Test
  4. 【manacher+FFT】BZOJ3160-万径人踪灭
  5. python3-开发进阶Flask的基础(2)
  6. noip200806火柴棒等式
  7. hihocoder编程收割赛20
  8. mysql 部分参数说明
  9. Redis-Linux安装
  10. Chrome浏览器video样式控制-隐藏下载按钮