Coding能力提升小技巧
一、使用变量的一般原则
1、变量初始化原则:
通常在变量声明时初始化;
在靠近变量第一次使用的位置初始化;
在类的构造函数里初始化变量。
2、作用域:
使变量引用局部化,即把引用到变量的地方尽可能集中在一起;
尽可能地缩短变量的存活时间;
尽可能地使变量的用途单一化(比如,pageCount的取值可能代表打印纸张的数量,但是如果它等于-1的话,表示有错误发生。应避免使用这样的变量。);
确保使用了所有已声明变量。
二、变量命名原则
一个好记的名字通常都是问题,而不是解决方案。一个好名字通常表达的是What而不是How,如果一个名字反映了计算的某些方面而不是问题本身,那么它
反映的就是how而不是what,请避免使用这样的变量名。(举例表示,想要表示一条员工数据,employeeData就比inputRec好,后者强调的是输入这一计算过程;
再比如想要表示打印机状态,printerReady就比bitFlag更好,后者更具有计算机特征。)
很多程序都有表示计算结果的变量:总额、平均值等,如果你要使用Total、sum、max、min等词语来修饰名词时,请把限定词加到名字的最后。当然如果你使用
Num时,我们通常约定,num放在变量名的开始位置代表一个总数:numCustomers表示员工总数。
1、为特定类型的数据命名
作为循环变量使用:如果这个变量需要在循环之外使用,那么就应该取一个比i、j、k更有意义的名字,尤其是在你使用了多个嵌套循环时。
作为状态变量使用:通常来说,标记变量应该用枚举类型、布尔型、具名常量来赋值,同时,也应该同上值进行比较。
作为临时变量使用:建议使用准确而且具有描述性的变量名。
为布尔类型变量命名时:给布尔变量赋予隐含“真假”含义的名字,像done/success这样的名字,他们的状态要么是完成要么是没有完成;要么是成功要么是失败。
而像status或者sourceFile这样的变量就看不出这些含义。不建议在状态变量前面加上is,这会降低程序的可读性;同时也不建议使用否定的变量名,比如notFound、
notDone,这也会使得代码阅读变得困难。
为枚举类型命名:使用枚举类型时,可以通过使用组前缀,如Color_、Month_来明确表示该类型的成员都属于同一组。通常使用大写表示枚举类型。
为常量命名:应该根据常量所表示的含义,而不是该常量所具有的数值为该抽象事物命名。(比如FIVE是个很糟糕的名字,而NUMBER比FIVE好多了,因为如果FIVE等于6就显得很搞笑了。)
2、关于C++中的一些非正式规则
变量名和对象名以小写字母打头,类名和函数名以大写字母打头。全局变量加上g_前缀,而成员变量使用m_前缀。对于typedef和struct声明的类型名,全部使用大写,由于这可能会与预处理常量发生混淆,所以可以在这些类型前面加上t_的前缀表示类型。对于具名常量,C++中全部使用大写来表示,用下划线来分割单词。还有其他的一些命名规则:比如通常i、j、k表示整数下标;p是指针;除了全部大写的名字和特定的前缀,一般不使用下划线。
三、常见数据类型数据的使用
1、关于指针的一些使用技巧
在与指针分配相同的作用域中删除指针;在使用指针之前检查指针;先检查指针所引用的变量再使用它;如果你的代码里出现了p->q->r->s这样的语句,请考虑使用中间变量,增强代码的可读性;删除或者释放之前检查指针是否为空,删除或者释放指针之后,把它们设置为空值。
C++中引入了指针和引用的概念,通常情况下,“按址传参”时我们使用指针,而“按值传参”时,我们使用引用(或是const引用)。C++11以来,引入了智能指针的,使用合适的智能指针也能减少指针错误的发生。
2、关于全局数据的一些使用技巧
只有万不得已时才使用全局数据,所以在使用全局数据时,要区分全局变量和类变量,相同条件下,优先使用类成员变量。当然也可以是使用访问器子程序来取代全局数据。在万不得已,必须使用全局数据时,可以通过以下3点,降低使用全局数据的风险:
创建一种命名规则来突出全局变量;
为全局变量创建一份注释良好的清单;
不用使用全局变量来存放中间结果;
最后一点,不要为了不使用全局变量而不使用全局变量。
四、非常见数据类型数据的使用