如何选择适合你的代码风格?
代码风格
- 声明:代码风格是帮助开发者更加高效的开发以及后期维修更新迭代的基础,良好的代码风格可以提升团队的开发效率,产品不同功能,在清晰简洁的代码风格下更加高效的被开发出来。
一,为什么需要管理代码风格?
- 试着想一下,一个程序员写一个程序,\(commit\)到团队的程序管理库里面,如果团队中的其他开发者需要这个功能,那么他就会去阅读这个源码,正所谓一千个读者,一千个哈姆雷特。就算是代码这样对于计算机来说非常严格的语言,而在我们人类看来绝对无法抛开我们固有的逻辑思维,而像计算机一样去思考,像程序编译器一样去理解这段程序,我们可以做到的就是阅读源码,梳理出自己的一套逻辑,然后理解这段程序的作用是干什么。
- 简而言之,代码风格是一个团队中必须统一的标准,不统一就会导致不同程序间的接口调用凌乱,团队成员对于整个程序的框架理解也不会更加清晰。
二,代码风格细节
- 为了了解如何规定一个好的代码风格,我们先来了解一下代码到底由哪些部分组成。
代码组成部分
- 影响自己的代码组成部分
- 一, IDE:(集成开发环境),正对于不同的语言,不论是前端还是后端,都有各自的代码风格,选择不同的集成式开发环境可以帮助你理解你们所正在开发的项目里面的一些层级结构,比如做Python,web开发的Django框架使用Pycharm是这样的:
- 左侧是项目的文件结构,右侧是代码的展示,不同文件夹采取不同的颜色加以区分,帮助更好的理解以及管理项目。
- 二, 编程字体:正如一个人的字体一样,不同的字体反映到严格的代码上面,反映自然大不相同,甚至走向相背离的极端,下面举两个具体的字体例子:
- Magneto字体
- Cascadia Code PL字体
- 相比于Magneto那更具艺术的字体,可以很清楚的发现Cascadia Code字体对于代码的展示更具优势,不同单词之间,不同字母数字之间区分更加的明显,方便程序员阅读以及理解代码的原始意义,就好像是阅读一个不仅仅聪明而且谦虚的人写的作文,字体优美简洁,同时在这种情况下,项目的共同构建者也更容易发现你的问题,提出意见,一起让整个程序更加的完善,鲁棒性更好
代码高亮(这一点非常重要)
举一个非常直观的例子
这是一张字母图,需要你去找到所有的
V
字符
也许你觉得很简单,但是相比于下面这种呈现方式,
V
一下子就找到了,是不是非常容易,你几乎不需要动脑筋,联想到我们人类理解客观事物的规律,一件事物从越是多的方面去理解,自然理解的也就越深,这一点同样适用于我们编写代码的过程,不同的高亮让你一下子通过视觉一下子就理解了这个区域到底是什么功能。#include <stdio.h> #include <time.h> void bubbleSort_1(int array[], int length); void print(int array[], int length); void bubbleSort_2(int array[], int length); int main() { clock_t begin = clock(); int array[] = {10, 1, 10, 0, 111, 121, 147, 0, 1, 3, 265, 111, 10, -156, 1315, 0001, 1518, 88, 131}; int length = 19; bubbleSort_1(array, length); print(array, length); clock_t end = clock(); printf("程序总运行时长为:%ldms", end - begin); }
#include <stdio.h> #include <time.h> void bubbleSort_1(int array[], int length); void print(int array[], int length); void bubbleSort_2(int array[], int length); int main() { clock_t begin = clock(); int array[] = {10, 1, 10, 0, 111, 121, 147, 0, 1, 3, 265, 111, 10, -156, 1315, 0001, 1518, 88, 131}; int length = 19; bubbleSort_1(array, length); print(array, length); clock_t end = clock(); printf("程序总运行时长为:%ldms", end - begin); }
稍微高亮一下就产生了完全不一样的效果。更何况还可以正对于每一个代码细节进行高亮
- 影响别人观感的部分
- 首先先来看一个极端的例子:
- 这是一个网页的JS,杂乱无章的排列,虽然由关键字高亮,虽然有行号,虽然有优秀的变量声明,但是说实在的正常人都不一定可以读懂这个代码的实际意义到底是什么,那么如果规范化之后呢?
- 瞬间就舒畅了,该缩进的缩进,该有的分号出现在该有的位置上,简洁的命名出现在该出现的地方,谁遇上这样的代码不喜欢呢?
- 总结
- 影响自己的
- IDE选择
- 代码字体
- 代码高亮
- 影响别人的:
- 代码缩进
- 同时影响的:
- 代码命名
- 代码注释
三, 代码风格选择:
- 这里着重介绍两种已经被很多程序开发者所接受的代码风格
- \(K\&R\)
- $ MicroSoft代码风格 $
\(K\&R\)
\(K\&R\)是一个历史相当悠久的代码风格,最开始就是由于伴随着C语言圣经Kernighan和Ritchie的《 C Programming Language 》的出版而逐渐被程序开发者们所接受的
具体细节
#include <stdio.h>
int main(int argc, char *argv[]) {
int a = rand() % 100;
if (a > 25) {
call_a_function();
call_another_function();
} else {
call_b_function();
} // end if
} // end main
- 8个字符的TAB键,列数限制在80列。
- 这在一定程度上要求程序开发这者必须精简,否则一不小心就会超出列数限制。
- 左花括号写在一行的末端,然而右花括号独立一行。
- 节省空间,整个程序排版紧凑,连续。
- 命名法:
- 以精简为主:所有变量以小写字母为主,单词考虑缩写, 长单词考虑使用下划线风格。
int result
char user_name
char[] user_pwd
\(MicroSoft代码风格\)
\(Microsoft\)微软使用一个名为匈牙利编码规范,他使用在微软任何产品内,如果你要使用微软的API,或者你也需要一套类似的编码规范,那么学习一下总是没有错的。
具体细节
共有前缀这是Microsoft特有出现的一种创新。
前缀 | 数据类型(基础类型) |
---|---|
c | char(字符) |
by | BYTE(字节,无符号字符) |
n | short(短整数和整数,表示一个数) |
i | int(整数) |
x,y | short(短整数,通常用于x坐标和y坐标) |
cx,cy | short(短整数,通常用于表示x和y的长度;c表示计数) |
b | BOOL(int) |
w | UINT(无符号整数)和WORD(无符号字) |
l | LONG(长整型) |
dw | DWORD(无符号长整型) |
fn | 函数指针 |
s | 字符串 |
sz,str | 以一个字节为0(空值)终止的字符串 |
lp | 32位长指针 |
h | 句柄(常用于windows对象) |
变量命名
int *lpiData //32位int指针
char *g_size // 全局变量指针,使用g作为前缀
缩进:
class CVector
{
public:
CVector() {}
.
.
.
private:
int x, y, z;
}
- 左括号与右括号独占一行