首页 > 其他 > 详细

分析一套源代码的代码规范和风格并讨论如何改进优化代码

时间:2019-10-13 09:44:37      阅读:111      评论:0      收藏:0      [点我收藏+]

根据工程实践题目,我在GitHub上找到了一份选题相关的代码,其使用的编程语言为Python。

源代码目录结构

技术分享图片

首先,可以看到这份代码的目录结构,总体来说,是比较清晰明确的。

  • 作者提供了README.md文件以供第一次阅读这份代码的人快速弄清组织代码的结构。
  • 主要实现逻辑和功能的代码,都是以.py结尾的python文件。
  • 除此之外,faster_rcnn_inception_v2_coco_2018_01_28、ssd_mobilenet_v1_coco_2018_01_28、object_detection三个文件夹放的是这份代码运行所依赖的库。
  • result_images、test_images、test_videos存放的是图片和视频数据
  • data中的数据主要为文本形式的标记(label)、物体状态(name)、id和它们之间的映射

 

文件名

作者的文件名使用了下划线命名法,代码的文件名以单词+下划线组成,文件包含的单词的含义就指明了这份文件主要的工作,比如:“multi_object_tracking”就表示进行多对象目标的跟踪。其命名格式是值得学习的,但在命名含义上存在一些问题:

  • 这里的第一个问题是,几个文件名的描述有点类似,“multi_object_tracking.py”和“multi_track_detection.py”就无法通过文件名本身来分清它们的功能,因为它们的描述太相近了。
  • 另外,文件名有的是对方法的描述,有的是对功能的描述。例如:”detection.py“是用Faster-Rcnn方法对目标进行检测,但文件名只提到了”检测“,而camshift2.py使用的是mean-shift方法,但没有提到这份代码是用来做目标跟踪的。

具体的改进方式,可以将文件名以”使用方法“+”实现功能“进行命名描述,这样会让看代码的人一目了然。

 

变量名

打开这套代码的主运行文件:multi_track_detection.py。首先看变量定义的区域:

技术分享图片

 

  • 作者在前面给了关于这个代码文件”在干什么“的说明
  • 变量的命名全部都是字母大写并且单词间以下划线隔开的,这些变量相当于常量,不再更改,所以用全大写字母来进行强调。这里变量和变量对应含义的映射是很清楚的
  • 每一个变量的定义前都有中文的注释,再次说明变量意义
  • 在代码编辑规范和风格上,双目运算符两边用了空格,逗号、冒号等符号后也用了空格,括号中各行之间保持了4个空格的缩进,使得代码整体比较简洁美观

 

函数

技术分享图片

 

 函数的命名依旧是单词+下划线的形式,非常清楚地表达了函数在做什么。函数体内的缩进和空格,以及注释都非常合理。但唯一不足的一点在于代码显得非常拥挤,让看代码的心情感到很压抑。

可以有如下的改进方式:

  • 编写函数时,按照一个事物正常的逻辑处理顺序进行编写,避免造成不断的“回溯阅读”
  • 考虑加入适当的空行:1、将变量声明、定义与处理代码逻辑部分分开   2、将函数内部各个逻辑相对独立的子部分的代码块隔开

 

 

 总结

经过阅读这套代码和之间编程的经验,可以总结出代码规范和风格上的一些一般要求:

  • 定义变量后要空行,尽可能的在定义变量的同时初始化该变量,即遵循就近原则
  • 每个函数定义结束后都要加空行。两个相对独立的程序块,变量说明之后必须加空行
  • 关键字之后要有空格,函数名之后不要留空格,应跟紧“(”,以与关键字区别
  • “,”之后要留空格。如果“;”不是一行的结束符,其后要留空格
  • 双目运算符前后应适当的加空格("%d"除外),单目运算符前后不加空格
  • 大括号{}分别要独占一行,互为一对要位于同一列,并且引用他们的语句左对齐
  • {}之内的代码要缩进一个Tab,同一地位要左对齐,地位不同的继续缩进
  • 注释只是提示不是文档。多重嵌套,段落结束处要注释。宏定义右边一定要有注释,说明作用

分析一套源代码的代码规范和风格并讨论如何改进优化代码

原文:https://www.cnblogs.com/jaroo/p/11664560.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!