美文网首页
关于命名的点点

关于命名的点点

作者: Iris_Fighting | 来源:发表于2016-08-19 09:47 被阅读60次

命名的注意规则

1.名字要完全、准确地描述出该变量所代表的事物
2.用名字表达变量所代表的是什么,不包含晦涩的缩写,同时也没有歧义

命名的要点

1.以问题为导向 强调是 WHAT,而不是 HOW

2.最适当的名字长度 经研究发现,变量名的平均长度在10到16个字符的时候,调试花的力气是最小的。平均名字长度在8到20隔字符的程序也几乎同样容易调试

3.变量名中的计算值限定词
很多程序都有表示计算结果的变量:总额、平均值、最大值,等等。如果你要用类似Total、Sum、Average、Max、Min、Record、String、Pointer这样的限定词来修改某个名字,那么请记住把限定词加到名字的最后。

这种方法的优点:

变量名中最重要的那部分,即为这一变量赋予主要含义的部分应当位于最前面,这样,这一部分就可以显得最为突出,并会被首先阅读到;
避免了由于同时在程序中使用totalRevenue和revenueTotal而产生的歧义
使用统一的编码规范可以提高可读性,简化维护工作。比如,revenueTotal、expenseTotal、revenueAverage、expenseAverage这组名字具有非常优雅的对称性。而totalRevenue、expenseTotal、revenueAverage、averageRevenue这组名字中则看不出什么规律来。

这条规则也有例外,那就是Num的限定词的位置已经是约定俗成的。Num放在变量名的开始位置代表一个总数,比如:numCustomers表示员工的总数。Num放在变量名的结束位置代表一个下标:customerNum表示的是当前员工的序号。这样使用Num常常会带来麻烦,因此,最好的方法是避开这些问题,使用Count或者Total来代表总数,使用Index来指代某个特定的员工。这样,customerCount就代表员工的总数,customerIndex代表某个特定的员工。

4.变量名中的常用对仗词 对仗词要使用正确,不然会产生歧义
常用对仗词如下:

begin/end
first/last
locked/unlocked
min/max
next/previous
old/new
opened/closed
visible/invisible
source/target
source/destination
up/dow

5.为特定类型的数据命名
为变量命名,除了通常的考虑事项之外,为一些特定类型数据的命名还要求作出一些特殊的考虑。比如,循环变量、状态变量、临时变量等等。

为循环下标命名

在循环中,最常见的下标变量就是i,j,k,如:

for(i = 0; i < arrLen; i++) {
// ...
}

如果循环下标变量只在循环内部使用,那么如此使用是没问题的,但是,如果该变量需要在循环之外使用,那么就应该为它取一个比i,j,k更有意义的名字。举个栗子,如果你从文件中读取记录,并且需要记下所读取记录的数量,那么类似于redcordCount这样的名字就更合适:

recordCount = 0;
while ( moreScores() ) {
score[recordCount] = GetNextScore();
recordCount++;
}

// using recordCount

另一种情况就是嵌套循环,比较常犯的错误就是在想写j的时候写了i,想用i的时候却写了j。

如果你使用了多个嵌套的循环,那么就应该给循环变量赋予更长的名字以提高可读性:

for ( teamIndex = 0; teamIndex < teamCount; teamIndex++) {
for ( eventIndex = 0; eventIndex < eventCount[teamIndex]; eventIndex++) {
score[teamIndex][eventIndex] = 0;
}
}

score[teamIndex][eventIndex] 比 score[i][j]给出的信息更多。

注意:如果你一定要用i、j、k,那么不要把它们用于简单循环的循环下标之外的任何场合,避免造成误解。要想避免这种问题,最简单的方法就是使用更好的命名而不是i,j,k。

6.为状态变量取一个比flag更好的名字。

最好是把标记看作是状态变量。标记的名字中不应该含有flag,因为你从中丝毫看不出该标记是做什么的。

为清楚可见,标记应该使用枚举变量、具名常量,或用作具名常量的全局变量来对其赋值。

看看下面比较差的标记命名:

if ( flag ) ...
if ( statusFlag & 0x0F ) ...
if ( printFlag == 16 ) ...
if ( computeFlag == 0 ) ...

flag = 0x1;
statusFlag = 0x80;
printFlag = 16;
computeFlag = 0;

上面这段代码反映不出能做什么,如果没有文档,不知道statusFlag = 0x80的含义是什么。下面是作用相同但更为清晰的代码:

if ( dataReady ) ...
if ( characterType & PRINTABLE_CHAR ) ...
if ( reportType == ReportTyoe_Annual ) ...
if ( recalcNeeded == false ) ...

dataReady = true;
characterType = CONTRAL_CHARACTER;
reportType = ReportType_Annual;
recalNeeded = false;

这段代码更加清晰。而且说明你可以结合枚举类型和预定义的具名常量来使用这种方法。

如果你发现自己需要猜测某段代码的含义的时候,就该考虑为变量重新命名。代码应该尽可能直接读懂。

7.为临时变量命名

8.为布尔变量命名
典型的布尔变量名:

done
error
found
success/ok

使用肯定的布尔变量名。避免双重否定:not notFound

9.为枚举类型命名
在使用枚举类型的时候,可以通过使用组前缀,如Color_,Planet_或者Month_来明确标识该类型的成员都同属于一个组

10.为常量命名
在具名常量时,应该根据该常量所表示的含义,而不是该常量所具有的数值为该抽象事物命名。比如FIVE是个很糟糕的常量名,CYCLES_NEEDED是个不错的名字。

详情请见https://mp.weixin.qq.com/s?__biz=MjM5OTA1MDUyMA==&mid=2655436637&idx=2&sn=a2a9c57ebad535f31b91f7de700de569&scene=0&key=305bc10ec50ec19b387e7ff7c1ac3174c278cddf7a3b416485e9f33cc2792df88550720cb8d96d5bd5f03fb0327a5a31&ascene=0&uin=OTc2NjEzNjAw&devicetype=iMac+MacBookPro12%2C1+OSX+OSX+10.11.5+build(15F34)&version=11020201&pass_ticket=ei4r2jx8g2HNdl%2FG%2BZ7FRaSyyrPTkW5SPpUFQirdO0bygn03ETTno2RqU2Ht9mtQ

相关文章

  • 关于命名的点点

    命名的注意规则 1.名字要完全、准确地描述出该变量所代表的事物2.用名字表达变量所代表的是什么,不包含晦涩的缩写,...

  • 关于命名

    尽管说服自己接受了自己的名字,对自己的名字有了一番深切的感悟,开始学会欣赏自己的名字,但这是阿Q式的爱,被动的爱。...

  • 关于gitHub的命名

    hub 是集线器的意思。gitHub自然是git集线器的意思,引申为服务和分支托管。

  • 内部前端规范v1.0

    项目目录结构规范 请查看 项目目录结构规范 HTML 命名规范 class 命名实行 BEM命名方式。关于BEM,...

  • 关于点点

    点点是我的小弟。 初二一开始是跟他一个班的,但是他老爱睡觉,也不喜欢搞卫生,偶尔倒垃圾,喜欢逗薇薇。他是一个很好的...

  • 关于用户故事的点点点

    这是2021年第44篇随笔,全文1274字。 4月的第8篇。 4月计划9篇,随笔8/9篇。老大要针对我们SM用户故...

  • 博为峰JavaEE技术文章 —— Hibernate域模型(3)

    今天小博老师继续带领大家学习域模型命名的物理命名策略。许多组织定义关于数据库对象(表,列,外键等)的命名。物理命名...

  • 关于重命名的三种方式

    关于重命名的三种方式--------------------------------------------- 入...

  • 让你的代码更规范(2)

    Objective-C没有其他语言那种内置的命名空间机制,因此关于命名有很大的只有空间,但是要防范重命名的发生,一...

  • Spring Boot 23 -- 代码规范

    一、关于命名 1、项目命名 项目名使用小写英文单词,多个之间使用连字符 "-" ,例如 my-test 2、包命名...

网友评论

      本文标题:关于命名的点点

      本文链接:https://www.haomeiwen.com/subject/zhlbsttx.html