村晓起名网

当前位置: 主页 >> 大师起名

变量起名-程序员内功-如何为特定类型的变量命名

发表于:2024-01-12 12:37:39 来源:村晓起名网 浏览:

上一篇变量名的注意事项中,我们给出了一些变量起名的注意事项,下面我们再给出一些特定类型的变量的一些命名规则,为大家提供一些参考。

程序员内功-如何为特定类型的变量命名

循环下标

对于常见的情况,命名为i,j,k都是大家约定俗成的,也就不多说了。

如果要在循环外使用该变量,那么就一定要命名成更有意义的名字,比如要累加一个数字列表的总数,xxxSum也许就可以:

xxxSum = 0;for (i = 0; i < xxxArray.length; i++){balabalaba…xxxSum += xxxArray[i];}

如果不是简单的循环,比如循环嵌套,最好就别再用ijk来命名了,因为那样可能会导致很多问题,一方面阅读者理解起来会有障碍,另一方面还可能会不经意间写错/写反,最后调试起来非常麻烦。比如处理表示表格的二维数组,用table[colIndex][rowIndex],就比table[i][j]更好理解。

临时变量

临时变量常用来存储处理过程的一些中间结果,经常会被起名为temp,a,b,c之类的毫无意义的名字。实际上,我们函数的大部分变量都是临时变量,但是大部分变量都会被我们认真地对待,起个好名字;只是还有一些我们没搞清该起个什么名字时,才会出现temp之类比较随意的名字。这个时候,我们应该研究为什么这个变量难以命名,是不是设计上出现了什么问题,或者一些其他原因,而不是直接地随意命名。

并且,当一个变量被这样命名以后,我们对待它也会变得十分随意,这大大提高了出错的概率。治大程序若烹小鲜,很多时候bug就藏在这些细节里面。

所以,对于临时变量,建议不要用这种变量,不用就不存在起名的问题了!

状态/标志变量

这类变量表达我们的程序当前状态,最常见的变量名可能就是flag了。

但是,起名为flag的标记根本不知道是干啥的,即使起名前面加点前缀,比如finishFlag,我们猜测它可能是表示结束状态的,但起名为finish都比后面加个flag更好,因为finish可以表达变量为true时,说明已找到,而finishFlag则什么都表达不了。下面就是一些错误示范:

if(flag)if(finishFlag)…

对于被标志变量,更好的处理方式是用常量/枚举来命名对应的各个值,然后用这些值去比较(也就是拒绝魔法值),变量名也应该尽量贴近它要表示的内容,比如:

if(finish)if(canPrint)…

无论什么时候,只要我们需要去猜一段代码或者一个变量表达的是什么的时候,都该重构这段代码,不要害怕修改,毕竟代码是写给人看的,重写花费的代价,远远比下次维护还需要再猜,然后猜错导致问题的代价更低。

布尔变量

很多布尔值用来做标志变量,所以,上一条的也在这里通用。

当然,由于布尔值得特殊性,它还有一些其他的命名规则。

首先,应该采用常见的命名,比如success,found,ready等等。

另外,布尔变量的名字应该是确定的,比如found,它的含义就是已经找到了,没有歧义,但是isFound呢?到底是找到了还是没找到?你是在问程序,还是在难为你自己?还有一些不是反问类型的,比如status,这个名字也常常被用在布尔值上,但它什么都不能表达,只能告诉你这是一个状态变量,他的true和false代表的意义完全搞不清,也许只有作者当时清楚了(过阵子有可能作者也忘掉了…)。

最后一个,不要在变量前面加否定词,这样容易把自己绕进去的。比如变量名为not_found,代码这样写:

if not not_found: balabala

这作者可能在写绕口令吧,那是不是还能写一个not_not_found呢?总之,命名要尽量简单明了,让人看一眼就明白是什么,方便他人,更方便自己。毕竟,大部分时候我们写的代码维护者还会是我们自己,给自己留条后路吧。

常量

常量命名要能表达该常量代表的是什么,比如

PRINT_READY = 0X2F

不要用有迷惑性的名字,或者只是简单的将值翻译一下,比如:

PRINT_STATUS1 = 0X2FSIXSIXSIX = 666

今天就写到这里了,欢迎大家点赞关注!