信游平台登陆

注册 | 登录 | 网址 接待拜候八百站长

如何编写格局美好的代码

2016/5/18 8:29:07 作者:站长日志 来历:http://www.easyx.cn/skills/View.aspx?id=117 浏览:2940次

良多初学者会被人一眼就看出来是初学者,为甚么?缘由良多。此中,代码格局是很重要的一项。不重视代码格局,不只别人看起来不舒畅,还会影响本身对代码的浏览。固然毛病的格局不会发生编译毛病,但却会让你更轻易出错,并且更难排查毛病。以是,学会编写格局美好的代码,是初学者必须要学的一课。

优异的代码格局并不是独一的,有良多种气概。本文仅讲授罕见的 C/C++ 说话编码法则,而其它法则信任大师在进修任务中会渐渐打仗到。

再有便是,为了便于浏览代码,EasyX 网站的代码都是比拟注重格局的。以是,若是筹算投稿到 EasyX,看看本文也很有须要。

以下讲授编写代码时在格局上一些罕见的注重事变。

1. 精确缩进

所谓缩进,是指在某一行代码的左端留出一局部空缺。接纳缩进的目标为了清楚的界说一个块的起头和竣事,如许会使法式加倍清楚易读。固然今朝支流的开辟平台都具有智能缩进的功效,可是良多时辰点窜代码仍是须要本身注重缩进题目。

上面的典范代码是求解 100 之内的质数,该典范中有多种缩进情况的例子: 

#include <stdio.h>#include <math.h>void main(){	printf("2");	int col = 1;	for (int n = 3; n <= 100; n += 2)	{		for (int m = 3; m <= sqrt(n); m += 2)			if (n % m == 0)				break;		if (m > sqrt(n))			printf("%c%d", (col++ % 5) ? '\t' : '\n', n);	}	printf("\n");}

除此之外,另有良多处所的典范代码有精确缩进,比方 MSDN、VC 自带的典范等。

能够看到,每行代码前的缩进清楚的标明了代码的布局,精确的缩进能够赞助开辟者更清楚有用地浏览代码并发现逻辑毛病。以是,把握精确的缩进格局,是编写标准代码的第一课。

2. 学会用 tab 键缩进和对齐代码

今世码中须要缩进时,简略的按一下 tab 键就好。凡是一个 tab 符占用 4 个空格的地位。每一个 tab 符能够精确的将光标定位到下一个 tab 位,即 4 的整倍数的地位后面。比方,光标外行首时,按 tab 键,光标将会定位到第 4 个字符后面;光标在第 6 个字符后面时,按 tab 键,光标将会定位到第 8 个字符后面。

按照 tab 符的这个特征,除用来缩进外,tab 键还能够用在良多处所,比方用来对齐代码。上面的典范片断用 tab 符将代码摆列得很整洁:

	switch(item)	{		case EMPTY:			setfillcolor(BLACK);		break;		case WALL:			setfillcolor(LIGHTGRAY);	break;		case PLAYER_A:		setfillcolor(BLUE);			break;		case PLAYER_B:		setfillcolor(RED);			break;		case PLAYER_DEAD:	setfillcolor(MAGENTA);		break;	}

3. 恰当增添空行

固然空行在 C/C++ 说话中不多大现实的目标,可是经由进程恰当的拔出空行能大大进步代码的可读性。普通情况下,在逻辑上相干联的代码块之间会拔出一个或多个空行。比方,头文件组、宏界说组、全局变量组之间、两个函数之间,另有函数之间和函数外部的逻辑片断之间,都能够恰当拔出空行。拔出空行的数目并不严酷划定,而是按照法式的范围和代码气概来过度调剂。比方,一个只要 30 行摆布的代码,差别的函数间拔出一个空行就能够;若是是 300 行摆布的代码,能够在函数间拔出 3 个空行。

第 1 点的典范代码比拟冗长,含有少许拔出空行的典范。在 EasyX 官网有更多的典范,拔出空行的情况也不尽不异。这些须要在进修编程的进程中渐渐体味。

4. 恰当增添空格

除操纵空行外,经由进程操纵空格来进步代码的可读性性也是法式员常常操纵的手腕。和空行一样,空格的操纵也不强迫性的划定,仅仅是为了加强代码的可读性。普通情况下,以下地位能够恰当拔出空格:

(1) 等号的前后;

(2) 数学运算符的前后,关头字和括号之间拔出空格;

(3) 比拟运算符的前后;

(4) 后面有代码的分号后面;

(5) 朋分差别参数的逗号后面;为了和高低行的代码对齐,偶然辰须要拔出两个空格;若是须要拔出更多空格能力和高低代码对齐,凡是会操纵 tab 键。

5. 恰当增添正文

不写正文的编码习气是不可取的。在较关头的语句、函数或代码片断四周以必然体例增添正文,会令代码简练易懂,描写清楚的正文能够让浏览代码的人像浏览散文一样舒心。

正文的体例有良多种,以下罗列罕见的正文体例。

(1) 语句之前的正文,比方:

	// 初始化画图窗口	initgraph(640, 480);

(2) 语句右侧的正文,比方:

	while(true)	{		int cmd = GetCmd();					// 获得用户号令		if (!DealCmd(cmd))	break;			// 处置号令		if (!DealGame())	break;			// 处置游戏		Sleep(200);							// 延时	}

(3) 语句内的正文,比方:

double springF = SPRINGK /* 弹力系数 */ * (len - SEGLEN);

(4) 代码首部的描写性正文,比方,easyx 官网的良多典范顶部都有这么一段:

///////////////////////////////////////////////////// 法式称号:xxxxxxxx// 编译情况:Visual C++ 6.0 / 2010,EasyX_2012立冬版// 作  者:xxxx <xxxx@xx.com>// 最初点窜:2012-x-xx//

(5) 函数首部的描写性正文 ,比方:

// 获得用户号令int GetCmd(){
    ......}

(6) 变量后面的描写性正文(对齐正文会更标致),比方:

struct Mover{	COLORREF	color;			// 色彩	float		x, 	y;			// 坐标	float		vX,	vY;			// 速率};

 曾说过:“一旦一行代码被敲到文件中, 你就已要起头保护那一行代码了。”以是,咱们本身便是好(或坏)正文的第一个受益者(或受益者)。

6. 太长的代码要折行

当一行代码很长的时辰(比方函数的参数比拟多、判定语句的前提比拟多),为了更清楚,能够把一行长代码分红多行誊写,比方:

(1) 分行写多个判定语句。看以下代码:

if (ball.x > field.width || ball.x < 0 || ball.y > field.height || ball.y < 0){	......}

能够分行写成如许(实在这个例子中的代码不算长,不分行也没事,这里只是举个例子):

if (ball.x > field.width || ball.x < 0		// 判定 x 坐标	|| ball.y > field.height || ball.y < 0)	// 判定 y 坐标{	...}

(2) 分行写多个参数。微软在 MSDN 中的良多例子都是如许做的,比方上面这段摘自 MSDN 的代码

	hwnd = CreateWindow(		"MainWClass",        // name of window class 		"Sample",            // title-bar string 		WS_OVERLAPPEDWINDOW, // top-level window 		CW_USEDEFAULT,       // default horizontal position 		CW_USEDEFAULT,       // default vertical position 		CW_USEDEFAULT,       // default width 		CW_USEDEFAULT,       // default height 		(HWND) NULL,         // no owner window 		(HMENU) NULL,        // use class menu 		hinstance,           // handle to application instance 		(LPVOID) NULL);      // no window-creation data

7. 恰当调剂代码的抒发体例

一些语句功效是类似的,恰当将一些语句换一个抒发体例,能够令代码更清楚。看以下代码:

ball.x = 320;ball.y = 240;if (new)	ball.color = BLACK;else	ball.color = NEW;ball.dx = rand() % 6 - 3;ball.dy = rand() % 6 - 3;

后面这段代码不错,可是若是点窜为上面如许,会更清楚:

ball.x = 320;ball.y = 240;ball.color = new ? BLACK : NEW;ball.dx = rand() % 6 - 3;ball.dy = rand() % 6 - 3;

8. 习气很重要

代码的格局不是要最初点窜,而是要在誊写代码的时辰就写精确。包含正文,都要在写代码的同时就写正文,乃至还能够先写正文而后补充代码。可是,必然不要在写完代码后再补充正文。

竣事

编码习气是一种感受,只要常常写代码、常常和火伴们分享代码,能力谙练把握,应用自若。