优雅的代码没有那么简单

优秀的的代码是一件艺术品,实用且优雅。

通过孟宁老师的课堂指导,我对代码的认识产生了深刻的变化,以前我一直认为项目只要能实现其功能就是完美的,现在看来这种观点不是完全正确的,真正优秀的项目是需要具备许多条件的,接下来我想结合孟宁老师的课件以及menu实验代码,使用VSCode作为工具探讨一下代码的艺术:

一、工欲善其事,必先利其器

首先我们要做的当然就是安装VSCode这一工具,下载链接为:

https://code.visualstudio.com/

 

下载结束后安装即可。

接下来就是要在vscode中配置c++,具体步骤如下:

1.下载mingw,网址如下:

https://osdn.net/projects/mingw/releases/

2.选择合适的版本下载过后,进行安装,会出现一下页面:

 

 勾选需要的选项后,点击升级即可完成安装。

 

 

 3.配置环境变量,以win10为例步骤如下:

首先打开控制面板中的系统,点击高级选项设置:

 

 

随后点击环境变量按钮:

 

 然后选择path,点击编辑按钮:

 

 点击新建按钮,并将所安装的mingw路径复制过来:

 

 接下来依次按确定(注意:一定要依次全部按确定才能保存),这样系统的环境变量就配置完成了。

4.配置VSCode软件中的c++:

首先安装软件中的c++工具:

 

随后打开vscode软件,新建一个文件夹,在这个新建文件夹中新建一个后缀为.cpp的文件,并按下F5进行运行,在该文件夹下会产生两个.json文件,配置如下:

 

 

 

 红色框内部是将系统中的gcc安装路径复过来即可,至此vscode所有需要的c++环境配置完成。

二、优雅的代码

首先代码风格的原则:简明、易读、无二义性,一个项目代码的风格就如同一个人给人的印象,代码风格之所以那么重要,是因为它往往决定了代码是否规范、是否易于阅读。代码虽然最终是要给机器看的,但毕竟还是面向程序猿们的编程,程序猿们是要陪伴整个项目开发过程的。在编写代码的过程中,尤其是在协作开发的过程中,如果对方的代码杂乱无章,读起来都费劲,更别说还需要在此基础上进一步开发,这对程序员来说是个巨大的挑战。好的代码风格不仅易于代码的阅读和理解,还能在很大程度上减少一些不必要的语法错误,例如少了 "}" ,如果在编码的时候严格遵循了花括号的对齐规则,那此类错误将容易被避免。

 

 

 

显然第一种注释比第二种注释给人的感觉更加的舒适。

当然这只是一个小小的例子,在实际的编程中我们要注意的规范有很多例如命名规则,各式各样的命名规则会给我们编程,尤其是团队合作项目带来巨大的困扰。因此,良好的编程思想,规范的编程方式是每一个优秀的编程人员应该考虑和具备能力。

 三、模块化与接口

首先我们要知道,一个项目必然要实现多种功能,那么我们首先想到的就是将这些功能进行分离,分别实现,然后将它们整合到一起,这样既方便团队的合作也方便了后期的维护。

那么我们就先来看一下什么是模块化:

模块化(Modularity)是在软件系统设计时保持系统内各部分相对独立,以便每一个部分可以被独立地进行设计和开发。软件设计中的模块化程度便成为了软件设计有多好的一个重要指标,一般我们使用耦合度(Coupling)和内聚度(Cohesion)来衡量软件模块化的程度。

模块化的耦合度一般分为:

 

而内聚度是指一个软件模块内部各种元素之间互相依赖的紧密程度。理想的内聚是功能内聚,也就是一个软件模块只做一件事,只完成一个主要功能点或者一个软件特性(Feather)。

 例如在menu测试项目中,我们就将不同功能进行了划分:

 

 分别实现函数的功能,最后在整合到一起。

既然最后要整合到一起,说明各个函数都有一个对外的接口,用来被引用,与外部函数进行交流,所以这里就需要引出接口的具体概念:

接口就是互相联系的双方共同遵守的一种协议规范,在我们软件系统内部一般的接口方式是通过定义一组API函数来约定软件模块之间的沟通方式。换句话说,接口具体定义了软件模块对系统的其他部分提供了怎样的服务,以及系统的其他部分如何访问所提供的服务。

例如在menu项目中,我们在menu.c文件开头就有这么一段声明:

 

 这样就是通过接口将其他文件的函数引用过来,在本文件中也可以调用。

具体函数举例如下图:

 

 main函数中的这些函数并不是在这一文件中进行编写实现的,而是在其他文件,例如menu.h文件中实现MenuConfig函数功能:

 

 这就充分体现了模块化与接口的思想。

四、线程安全

无论什么时候,程序的正确稳定一定是最最重要的,因此程序编写过程中我们也要充分考虑安全问题,最突出的就是线程安全问题。

线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行读写操作,一般都需要考虑线程同步,否则就可能影响线程安全,引起线程安全问题主要原因就是函数的可重入性。

我们结合menu项目中代码可以看到,可以通过一定的手段来确保线程的运行安全:

 

 在这个示例中就是采用了加锁的方式来确保线程运行时的完整性。

五、总结

通过孟宁老师课上的讲解以及对menu项目代码的阅读分析,我充分认识到作为一名优秀的编程人员需要的不仅仅是代码的功能的实现,还要考虑到方方面面的因素,例如代码的可读性,模块的耦合内聚性,线程的安全性等。

本文主要参考文献:https://github.com/mengning/menu

 

posted @ 2020-11-05 17:47  陈金涛  阅读(209)  评论(0编辑  收藏  举报