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

来源:互联网 发布:java监听器使用方法 编辑:程序博客网 时间:2024/05/21 21:41

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

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

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

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

转载请注明地址:独立日记

0 0
原创粉丝点击