二、有意义的命名
2015-12-16 本文已影响244人
树下老男孩
名副其实:
变量、函数或类的名称就能够说明为什么它存在,做什么事,怎么用,如果需要注释来补充,就不算名副其实:
//消逝的时间,以日计, bad!
int d;
//good
int daysSinceCreation;
int daysSinceModification;
避免误导
避免留下隐藏代码本意的错误线索。
accountList 一组账号,如果类型不是List会引起误判,accountGroup或bunchOfAccoutns,甚至accounts,更可怕的例子:使用小些字母l跟字母O作为变量名
做有意义的区分
代码是写给人看的,仅仅是满足编译器的要求,就会引起混乱
- 以数字系列命名:void copyChars(char a1[],char a2[]) ==> void copyChars(char source[],char destination[])
- 说废话: a, an, the, Info, Data
- 使用可读的名字:避免过度使用缩写,genymdhms (生成日期,年月日时分秒)
- 使用便于搜索的名称:避免使用Magic Number,避免使用单字母,或出现频率极高的短字母组合(注意度的把握);MAX_CLASSER_PER_STUDENT 跟 “7” “e”
类名
类名和对象名应该是名词或名词短语,Customer、Account
方法名
动词或动词短语:deletePage、save,属性访问、修改和断言:加上get、set和is
别装可爱
使用俗语或俚语, eatMyShorts()表示abort() eatMyShorts:去死吧
每个概念对应一个词
给每个抽象概念选一个词,并一以贯之。比如获取数据可以使用fetch、retrive、get这些词语,但最好能够统一使用一种(controller、manager类似)
名字尽量来自解决方案领域或问题领域:
- 使用解决方案领域名称:使用计算机领域的科学术语、算法名、模式名等。如AccountVisitor:Visitor模式实现的Account类。
- 使用问题领域的名称:如果不能用程序员熟悉的术语来命名,就采用所涉问题领域的名称。排序==> sort
适当使用有意义的语境:
- 良好命名的类、函数、名称空间来放置名称,给读者提供语境
- 给名称前加前缀:firstName、lastName、street、houseNumber、city、state和zipcode,和在一起知道是地址,孤零零时无法推断, state=》addrState
- 事不过三,如果传递给函数的变量超过三个,考虑封装成概念,添加struct或class
- 不要添加没用的语境