编码修养系列----编写易于理解的代码必学篇


最爱的程序员尼克

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];
  • 优点:
  1. 可以缩短原本较长的数据类型名
  2. 可以用与变量特性相温和的数据类型声明变量
  3. 程序可读性更高、更易理解

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 好处

  • 代码越简练,接手代码的人,也就是更新代码(重构代码)的第三方就会更容易理解。代码更容易理解带来的好处:
  1. 易于修复代码漏洞(debugging)
    2.易于重构代码(refractoring)
  2. 易于维护代码(maintenance)
  3. 易于修复代码(rebuilding)
  4. 易于复用代码(reusing)
  • 由此可见,遵循KISS原则编写简练代码关系到日后所有工作。

11、小结

有一说一,看完这一篇,确实让我对代码的“简单性”有了新的理解。推动程序模块化,我希望所有初级程序员都能这样做,好习惯,慢慢养成嘛

猜你喜欢

转载自blog.csdn.net/weixin_43722052/article/details/110948423