您的位置:首页 > 其它

独立日记 2015年10月3日 变量名的力量

2015-10-03 22:02 218 查看
呼,最近甚是孤独啊,整个公司就自己一个做技术的,没人指导,没人结伴编程,上下班没人一起讨论技术,没人互传种子,所以就买了本《代码大全》准备开啃。

到目前为止只看了第十一章《变量名的力量》

书上的内容就不多说了,只说些书上推荐的命名方式,和自己最终定的命名方式。

1.选择一个更详尽名字

先做个比较:

代码1:

x = x - xx

xxx = xxx + 1


代码2:

profit = income - cost

count = count + 1


以上的代码一眼就能看出来哪个是你希望在你项目中看到的,所以给一个变量名定义有意义的名字很重要!!!很重要!!!很重要!!!

ok再来几组:

描述好名字坏名字
当前的日期:currentDate,todaysDate;current,x,x1,date;
每行的页数:linesPerPage;lines,l,x,lpp;
以上坏名字中的date,lines看上去不错,但是还是没有currentDate和linesPerPage描述得更详尽。

2.好的变量名通常表示的是what?而不是howto

举个栗子:

一条员工数据记录的名字可以为inputRecord或者employeeData第一个名中,input(输入),record(记录)这些为计算机术语,是howto。第二个名字,则描述问题,是what。

以下这段内容参考自:读书笔记:第11章_变量名的力量:选择好的变量名

比如员工数据记录作为一次运算的输入,你可能会命名为inputRecord,这个输入有多个呢?你会编号为inputRecord1,inputRecord2……吗?到后来可能你自己也不知道哪对哪了。所以不要针对计算机来命名,命名应该反映出问题本身。员工数据记录命名为employeeData最好了,这样万一还有一个雇主的数据记录,就可以用employerData来代替inputRecord2了。

3.变量名的长度

书中推荐10-16个或者8个到20个,但不是硬性标准。

来个栗子:

numberOfPeopleOnTheUsOlympicTeam(太长)

noo(太短)

numTeamMenbers(正好)


短名字并不总是不好的,比如作用于循环变量或者局部变量,简单的计数器for (int i = 1,i ……. 这种变量只用于几行代码之内。但是双重循环使用i,j是勉强可以的,但是一不小心把i写成了j,把j写成了i,那就太好玩了,哈哈。所以双重或多重循环中推荐使用rowIndex,columnIndex这种意义详尽的变量。

4.变量名中的计算限定词

比如:Sum,Total,Average,Max,Min,Record,String,Pointer等这样的限定词来修改某个名字的时候推荐加到该名字的最后,例如:incomeTotal。这时候,变量名中最重要的部分income(收入),则显得最为突出。有的人喜欢写成,totalIncome,这样也没有不对的,但是如果程序中同时出现了incomeTotal和totalIncome那就太糟糕了,bullshit!!!

so,不管你时用限定词后缀还是前缀,要保持一致性。

5.对仗词

对仗词要使用准确

begin/end,first/last,locked/unlocked,min/max,next/previous,old/new,

opened/closed,visible/invisible,source/target,source/destination,up/down

6.状态变量命名

if (flag)...


if (statusFlag & 0x0F)...


flag = 0x1;


statusFlag = 0x80;


我凑,什么是flag,0x1又tm是什么!!!!!!!

if (dataReady) ...


if (characterType & PRINTABLE_CHAR)...


if (reportType == ReportType_Annual)...


dataReady = true


characterType = CONTROL_CHARACTER;


reportType = ReportType_Annual;


天还是那么的蓝…

以上的补充:

// values for CharacterType 常量/宏的命名


const int CONTROL_CHARACTER = 0x80;


#define PRINTABLE_CHAR  0x01


// values for ReportType 枚举变量的命名


enum ReportType {


ReportType_Daily,


ReportType_Annual,


}


6.为临时变量命名

做个比较

a = 5


aa = a * a


aaa = a * a * a


尼玛…

// a cube


length = 5


square = length * length


volume = length * length * length


7.为布尔变量命名

done,success,found胜过isDone?isSuccess?isFound?

尽量用前者。

不要使用双重否定,例如if not notFound then ….

8.自己的命名规则

命名规则要有,有比没有强。好处一大堆,提升交流效率,团队协作等。

本人使用lua和c++所以命名规则如下。

内置类型:

nCurrentIndex(整数类型)


dLength(小数)


cGrade(字符)


strName(字符串)


pObject(指针)


成员变量:

m_pHero


m_nEnemyCount


全局变量:

g_nScore


类/类型:

TypeName/ClassName


常量/宏:

CONSTANT,MACRO


枚举类型:

EnumeratedTypes { // 常用复数


Base_EnumeratedType


}


成员方法:

void memberFunction();


void Class::memberFunction(){}


函数:

void CLanguangeFunction() {}


最后摘抄一下书上的Key Points

(1) 好的变量名是提高程序可读性的一项关键要素;

(2) 名字要尽可能地具体,但也不要太长;

(3) 命名规则应该能够区分局部数据、类数据还是全局数据,要注意前后一致;

(4) 尽量不要用缩写,真的要用的话,就用大家熟知的,比如CCTV等;

(5) 代码的阅读次数远远多于编写的次数,所以确保你取的名字更侧重于阅读方便而不是编写方便。

其它:http://blog.csdn.net/xujinsmile/article/details/8694026

转载请注明地址:独立日记
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: