首页 > 其他 > 详细

《编写可读代码的艺术》第2章 把信息装到名字里

时间:2020-10-29 09:36:36      阅读:29      评论:0      收藏:0      [点我收藏+]

1.选择专业的词

    GetPage(url)                  应改为    FetchPage(url) or DownloadPage(url)

    BinaryTree::Size()          应改为    BinaryTree::Height() , BinaryTree::NumNodes() , or BinaryTree::MemoryBytes()
    Thread::Stop()               应改为    Thread::Kill() or Thread::Pause()

2.找到更有表现力的词

    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

3.避免像tmp和retval这样泛泛的名字

   示例1:

1 retval += v[i] * v[i];
2 
3 //反面例子:除了“返回值”,没有包含更多信息
4 retval += v[i];
5 
6 //正面例子:”平方和“
7 sum_squares += v[i]; //没有体现出”平方和“,更快地发现bug

    示例2:

 1 //tmp是个好名字: 作用域很小,表示临时存储
 2 if (right < left) {
 3     tmp = right;
 4     right = left;
 5     left = tmp;
 6 }
 7 
 8 //尽管作用域很小,但是重点并不在于临时存储,user_info会是一个更好的名字
 9 String tmp = user.name();
10 tmp += " " + user.phone_number();
11 tmp += " " + user.email();
12 ...
13 template.set("user_info", tmp);
14 
15 //tmp临时存储并不准确,在后面加上后缀_file,可以更清楚地表达其含义
16 tmp_file = tempfile.NamedTemporaryFile()
17 ...
18 SaveData(tmp_file, ...)

3.循环迭代器

    通常i, j, iter和it是常用的索引和循环迭代器,尽管名字空泛,但是大家都知道其含义。

    但是在某些情况下会有比其更贴切的名字,例如:

//反面例子
if (clubs[i].members[k] == users[j])

//正面例子:选择club_i , members_i , users_i ) or ( ci , mi , ui )
if (clubs[ci].members[ui] == users[mi]) //Bug! 第一个字母不匹配

    使用tmp,retval等空泛的名字需要好的理由,多花几秒想一个更好的名字可使自己的“命名能力”很快提升。

4.使用具体的名字代替抽象的名字

    待续。。。。

if (clubs[ci].members[ui] == users[mi]) //Bug! 第一个字母不匹配

《编写可读代码的艺术》第2章 把信息装到名字里

原文:https://www.cnblogs.com/yyqng/p/13894169.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!