编写易于理解的代码所需编码准则
1、不要使用goto语句
- 编程领域前辈们一直挂在嘴边的话:“绝对不要使用goto”
- 从编码角度,goto语句更易使用。
- 但从程序易于理解和维护的角度看,则更应该使用能够将逻辑紧密联系的结构化程序设计方式,也就是一个main函数,几个子函数。
- 举个使用goto的例子,你在读程序时读到200行,一个goto语句下来你回到了第17行,又一个goto过来,你跑到了987行,然后再回第200行。这样好吗,这不好!
- 事实证明,完全摒弃goto语句,并不会影响编程工作。
2、不要替换c语言组成要素
- 下面举几个例子大家就明白了
#define BEGIN { //忘了PASCAL吧
#define END } //别那么保守,这样不好
#define @ { //太激进,太个性,这样也不好
#define $ }
#define 自动_变量 auto //大家都明白这是啥意思,就别改了
#define 整数型_变量 int
3、缩短过长数据类型名称
- 举个例子,用typedef命令重定义数据类型名
typedef unsigned long int ULI;
typedef unsigned short int USI;
ULI myLong;//用新的数据类型别名声明变量
USI myShort;
- 有时也可以声明一些有特殊含义的变量。例如,用 unsigned long int表示速度,而long int表示瞬时速度.
- 这样会让程序更易理解
typedef unsigned long int SPEED;//速度
typedef long int ACCEL;//瞬间加速度
SPEED carSpeed[10];
ACCEL carAccel[10];
- 优点:
- 可以缩短原本较长的数据类型名
- 可以用与变量特性相温和的数据类型声明变量
- 程序可读性更高、更易理解
4、使用if语句而非三元运算符
- C语言支持简单的表达式替换if语句
if (num1 = num2)
temp = num3 + f(num1);
else
temp = f(num1) - num3;
temp = (num1 == num2) ? d + f(num1) : f(num1) - d
- 上面俩,哪一个更容易理解呢?
- 不可否认,三元运算符的可读性有时候更高。当然,我们最好还是要用if语句
5、数组名应限制在三维之内
- 工作过程中,二维数组就满足需求了
6、考虑驱动函数main函数的作用
6.1 作用
- main函数是驱动函数,main函数调用的函数称为被动函数
- main函数应该用注释形式记录程序名、著作权声明、包含程序目标等信息。
- 而且main函数的主体部分应该是堆被动函数的调用语句。
6.2 示例
- 程序模块化
/*驱动函数*/
int main()
{
minInfantry = 8;
minArtillery = 8;
/*函数调用语句的作用与目录类似*/
statInfantry = InfantryRoutines(x);
statArtillery = ArtilleryRoutines(y);
}
/*被动函数*/
InfantryRoutines(int x) {
...
return result;
}
ArtilleryRoutines(int y) {
...
return result;
}
7、将常量替换为符号常量或const形态常量
7.1 const型常量
下面代码中的常量18和0.5代表啥?
一眼下去,布吉岛哇
int sleepTime = 18 + 0.5;
- 我们可以定义const型常量并赋予有意义的常量名,可大大改善程序的可读性如下:
const int const_initialAirconDegree = 18;//常见写法1
const int AIRCONDEGREESTEP = 0.5;//常见写法2
....
sleepTime = const_initialAirconDegree + AIRCONDEGREESTEP;
7.2 #define预处理定义符号常量
- 符号常量的惯例是将所有字符大写,但const没有这种惯例
#define INITIALAIRCONDEGREE 18;/
#define AIRCONDEGREESTEP 0.5;
....
sleepTime = INITIALAIRCONDEGREE + AIRCONDEGREESTEP;
8、考虑变量声明部分的顺序
8.1 顺序
- 在变量声明语句部分,最好按照一定的标准排列:
- 用户自定义数据类型(结构体、共用体、枚举等)->外部变量->静态变量->全局变量->局部变量
- 或者根据使用范围从宽到窄、变量名称从长到短 的顺序排列也可
8.2 why?
- 那种顺序最优并不重要,最重要的是先制定标准,之后严格遵守。
- 只有这样,之后开发人员讨论程序或是验收代码的时候,才能立刻找到特定变量。
- 实际工作中,程序员会把用户自定义数据类型(结构体、共用体、枚举等)、外部变量、静态变量、全局变量、局部变量等单独存放在一个头文件,之后根据需要再插入其他。
9、尽可能不使用全局变量
- 扰乱程序逻辑,增大理解难度
- 优秀的编码习惯应该避免使用全局变量
10、遵循KISS原则
10.1什么原则????
- KISS原则也就是 Keep it simple and short的缩写
- 越是简练的语句,越能传达信息
10.2 好处
- 代码越简练,接手代码的人,也就是更新代码(重构代码)的第三方就会更容易理解。代码更容易理解带来的好处:
- 易于修复代码漏洞(debugging)
2.易于重构代码(refractoring) - 易于维护代码(maintenance)
- 易于修复代码(rebuilding)
- 易于复用代码(reusing)
- 由此可见,遵循KISS原则编写简练代码关系到日后所有工作。
11、小结
有一说一,看完这一篇,确实让我对代码的“简单性”有了新的理解。推动程序模块化,我希望所有初级程序员都能这样做,好习惯,慢慢养成嘛