高质量编程简介及编码规范(一)|青训营笔记

103 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天

一、本堂课重点内容:

  • 高质量编程

二、详细知识点介绍:

  • 高质量编程

1.1 简介

编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码。

  • 各种边界条件是否考虑完备
  • 异常情况处理,稳定性保证
  • 易读易维护

实际的应用场景千变万化,各种语言的特性和语法各不相同,但是高质量编程遵循的原则是相通的。

Go语言开发者 Dave Cheney眼中的高质量代码:

  • 简单性
    消除“多余的复杂性”,以简单清晰的逻辑编写代码。
    不理解的代码无法修复改进。
  • 可读性
    代码是写给人看的,而不是机器。
    编写可维护代码的第一步是确保代码可读。
  • 生产力
    团队整体工作效率非常重要。

1.2 编码规范

  • 代码格式
  • 注释
  • 命名规范
  • 控制流程
  • 错误和异常处理

1.2.1 编码规范——代码格式

推荐使用gofmt自动格式化代码

  • gofmt

Go语言官方提供的工具,能自动格式化Go语言代码为官方统一风格,常见IDE都支持方便的配置。

  • goimports

也是Go语言官方提供的工具,实际等于gofmt加上依赖包管理,自动增删依赖的包引用、将依赖包按字母序排序并分类。

1.2.2 编码规范——注释

注释应该做的:

  • 注释应该解释代码作用
  • 注释应该解释代码如何做的
  • 注释应该解释代码实现的原因
  • 注释应该解释代码什么情况会出错

好的代码有很多注释,坏代码需要很多注释。 ——Dave Thomas and Andrew Hunt

注释应该解释代码作用

  • 适合注释公共符号

注释公共的常量、变量及对外提供的函数。只有函数比较简单时才不需要注释。

例子: image.png

github.com/golang/go/b…

反例: image.png 通过函数名我们已经很清晰地知道了上面注释的信息。

注释应该解释代码如何做的

  • 适合注释实现过程

对代码中相对来说比较复杂的逻辑进行说明。

例子:

image.png

github.com/golang/go/b…

反例:

image.png

注释中只包含了代码中的信息而没有额外信息。

注释应该解释代码实现的原因

  • 适合解释代码的外部因素
  • 需要提供额外的上下文

需要解释代码实现原因的外部因素,这些因素脱离上下文后很难进行理解。

例子:

image.png

github.com/golang/go/b…

注释应该解释代码什么情况会出错

  • 适合解释代码的限制条件

例子:

image.png

github.com/golang/go/b…

公共符号始终要注释①

  • 包中声明的每个公共的符号:变量、常量、函数以及结构都需要添加注释
  • 任何既不明显也不简短的公共功能必须予以注释
  • 无论长度或复杂程度如何,对库中的任何函数都必须进行注释

例子: image.png

github.com/golang/go/b…

  • 有一个例外,不需要注释实现接口的方法。

反例:

image.png

公共符号始终要注释②

  • 对于公共符号都要有注释说明
  • 尽管LimiterReader.Read本身没有注释,但它紧跟LimitedReader结构的声明,明确了它的作用。

例子:

image.png

小结

  • 代码是最好的注释
  • 注释应该提供代码未表达出的上下文信息

三、引用参考: