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! 第一个字母不匹配
原文:https://www.cnblogs.com/yyqng/p/13894169.html