这本书目前读了前 3 章,共鸣的地方还是不少的,比如:tmp 这种“不知道怎么命名时的命名”,对自己平常的工作危害是蛮大的;长名字和短名字的取舍困惑;get方法通常代表轻量级的方法,乱用会导致性能问题等等的坑,自己都掉进去过。
这里总结几点比较印象深刻的:
1. tmp 的使用应该尽可能带后缀 描述场景,并且只用在生命周期较短的时候,且“临时性是其主要因素”的时候;
2. 循环迭代器,通常用 i,j,k 等,但在大段代码里面,多个同时使用往往会降低可读性,如:
for (int i = 0; i < clubs.size(); i++)
for (int j = 0; j < clubs[i].members.size(); j++)
for (int k = 0; k < users.size(); k++)
这时候可以用 club_i, members_i, users_i 来避免混淆,或者简化形式:ci, mi, ui
3. 带单位的值,max_length ===> max_chars
4. 长命名和短命名:在小作用域里面,用短命名;在大作用域用常命名
5. 不要用 filter 这种有歧义的名字:究竟过滤掉,还是过滤了然后剩下的;用 min、max 来表示极限(包含边界); first 、last 来表示首尾(含); begin 、end(表示[a,b) 这种包含/排除模式的)
6. 布尔值命名:加上像is、has、can、use或should这样的词,可以把布尔值变得更明确,同时注意不要用反义的,比如:disable_xxx
7. 名字应该承载更多信息,Height(), NumNodes() 比 Size() 更好
8. get*() 这种一般是轻量级的操作,不要随便使用这种命名,比如 getCost 如果流程复杂,性能消耗大的话,应该用 ComputeCost();此外 get*() 的泛滥使用是个坏习惯,比如: GetPage(),无法描述 page 的获取方式,来自数据库? 互联网?,如果是互联网, FetchPage()、DownloadPage() 更好。
Via:
《编写可读代码的艺术》