zoukankan      html  css  js  c++  java
  • 读书笔记_代码大全_第11章_变量名的力量

    选择好的变量名

    前注:希望我的读书笔记能带你快速翻过30页的《代码大全》,若有不妥之处,恳请指正。这部分很基础,但也是最常用的,不要小看哦~

    http://www.cnblogs.com/jerry19880126/

    对于码农来说,给变量取名是家常便饭,除了必须要遵循的命名规定外(C/C++/Java要求只能用字母、下划线和数字组成变量名,且开头不能是数字,不能与关键字重名等),还有很多“建议”去研究,不要小看这些“建议”,他们是你从菜鸟成长为编程高手的必经之路。

    1. 常用的命名规则

    在程序中,有变量(全局,局部,类成员变量,常义变量),有类(自定义或标准库),有函数(也叫做方法),那么怎样区别他们呢?通过上下文区分是最可靠的方式,然而这不是直观的,直观的方法是干脆从命名规则上就加以区分。一般地,局部变量用小写字母开头,后面的词用大写字母开头,比如smallCake,whiteBirdWeight等,全局变量加上g的前缀,表示为g_smallCake等,类成员变量用m_前缀,如m_whiteBirdWeight,常义变量初始化后值就不能改变的变量,在C++中,这些变量通常是这样定义的:const int ITER_AMOUNT = 5,这有些类似于宏定义,全部都用大写字母,用下划线作分隔符;类开头即用大写,如SheepClass,Weather等;函数定义同类,也是开头大写,不用担心与类区分不开,因为C/C++/Java等编程语言要求调用函数一定要在末尾加上括号的,即使这个函数一个参数也不要用,如AddNumber()等。

    2. 命名不能太短

    比如x,xx,x1这样的变量能说明什么?还有初学者喜欢用的a,b,c……这些毫无意义的变量名会让你的程序可读性大大下降。

    3. 命名不要太长

    比如班级总人数表示成numberOfPepleInAClass,这样的长词组写第一遍时可能还行,但写第二遍,第三遍……到后来你都嫌麻烦了,若没有自动补齐的插件,很容易拼写出错。

    4. 有意义 Vs 长度

    命名太短使变量无意义,命名太长又不利于编程(敲击键盘累人),那么到底该怎么命名呢?这是一个需要权衡的问题,方法是用尽量短的单词来描述变量,同时使之有意义,别的程序员看到你的变量就知道它的用途了。比如班级总人数可以表示成totalPepleInClass,既简单明了,又能体现变量的含义。

    5. 以问题为导向

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

    6. 保持一致性

    在命名时,经常会有命名成AB还是BA的问题,比如总人数可以命名成totalPeple,也可以命名成peapleTotal,到底该怎么办呢?这没有硬性的规定,到底怎样写取决于你,但要保持前后一致。比如你前面用了totalPeple,后面就不要用revenueAverage了,而要用averageRevenue。

    7. 循环下标命名

    我们很喜欢用i或者j来作为循环下标,比如for(int i = 0; i < 10; ++i){…}这样的循环语句,这样做很正常,因为i只在这个循环内用,有时用作计数,有时用于数组下标的索引。但双重循环呢?

    for(int i =0; i <10; ++i)

    {

             for(int j = 0; j < 2; ++j){…}

    }

    这样做勉强也是可以的,但双重循环时最好还是将i或j换成一个有意义的名字。一个简单的例子是遍历二维矩阵,可以用rowIndex代替i,可以用columnIndex代替j。

    8. 临时变量也应有一个有意义的名字

    我们经常喜欢把些临时变量命名为temp,比如计算一元二次方程根的时候,用temp=sqrt(b^2-4ac),但这样其实不好,用discriminant(判别式)来代替temp,读你程序的人会立刻明白这个临时变量的含义(除非他不认识这个单词,哈哈)。

    9. 布尔变量不要用flag

    码农们也喜欢用flag来表示布尔变量,用于设置标志,但这样其实是很模糊的,因为不知道这个标志是用于什么的,而且一旦程序中出现不止一个标志,flag的命名容易引起冲突。《代码大全》上推荐用的是诸如done,error,found一类的布尔变量(或者像isDone,isError,isFound),这样不用解释,读者就清楚这类标志是大致意思了。布尔变量不要用否定形式,比如说notFound这类,if(notFound)等条件判断常常把人绕晕,如果要用否定,就用!found吧。

    最后摘抄一下书上的Key Points

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

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

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

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

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

    <end>

  • 相关阅读:
    hdu6229 Wandering Robots 2017沈阳区域赛M题 思维加map
    hdu6223 Infinite Fraction Path 2017沈阳区域赛G题 bfs加剪枝(好题)
    hdu6438 Buy and Resell 买卖物品 ccpc网络赛 贪心
    hdu6441 Find Integer 求勾股数 费马大定理
    bzoj 1176 Mokia
    luogu 3415 祭坛
    bzoj 1010 玩具装箱
    bzoj 3312 No Change
    luogu 3383【模板】线性筛素数
    bzoj 1067 降雨量
  • 原文地址:https://www.cnblogs.com/jerry19880126/p/2816990.html
Copyright © 2011-2022 走看看