为什么要编程规范

构建一个大型项目,往往是很多人一起参与,堆砌的代码行数都是成千上万行。如何保证代码的健壮性?编程规范必不可少。

命名

命名能力体现了一个程序员的基本编程素养。

让你的名字承载更多的信息,把信息装到名字里。

  1. 命名的关键是能准确达意,对于不同作用域的命名,我们可以适当地选择不同的长度。
  2. 利用上下文简化命名。
  3. 命名要可读,可搜索。如 get, select, set等等。
  4. 用具体的名字代替抽象的名字。
    • 检测服务是否可以监听某个给定的TCP/IP端口。
    • ServerCanStart() 换成 CanListenOnPort()

tip: 可以到 github 上找一些相关的项目,看看别人是如何命名的。

注释

命名很重要,注释跟命名同等重要。注释就是对代码的有力解释。

注释的内容主要包括三个方面:做什么(what),为什么(why),怎么做(how)。

为什么要写注释呢?

  1. 注释比代码承载的信息更多。
  2. 注释起到总结性作用,文档的作用。通过注释大概了解代码的实现思路,阅读起来更加容易。
  3. 一些总结性注释能让代码结构更清晰。

对于类和函数一定要写注释,尽量写全面,详细。对于函数内部,可以少写一些。

代码行数

  1. 函数的行数最好不要超过一屏幕。大约在50~80行。

  2. 写长函数时,需要拆分主干逻辑和次要逻辑。抽取公共且独立的处理逻辑。

一行代码

  1. 一行代码最好不要超过IDE显示的宽度。大约在80~100个字符。

    如果超出行数导致换行会影响代码的整洁,不利用阅读。

空行分割单元块

对于那些影响逻辑的长函数,无法拆分的长函数,为了让逻辑更加清晰,可以使用空行来分割各个代码块。

代码缩进

Go 语言,使用 gofmt 或 goimports 自动缩进。

目前有使用两格缩进和四格缩进。主要看你使用的语言业内,主流如何使用。

如 php 用四格缩进,JAVA 用两格缩进。

大括号是否另起一行

Go 语言强制使用与函数名同一行。

目前有使用与函数名同一行或单独占一行。

主要看你使用的语言业内,主流如何使用。

如 php 喜欢使用单独占一行。JAVA 喜欢使用与函数名同一行。

排列顺序

Go 语言,使用 gofmt 或 goimports 自动排序。

  1. 依赖类,按照字母序从小到大排列。
  2. 在类中,成员变量排在函数前面。
  3. 在函数中,成员排在最上面。
  4. 作用域从大到小排列。public > protected > private。

把代码分割成更小的单元块

为什么要分割更小的单元块:

  1. 大部分人阅读代码的习惯都是,先看整体再看细节。
  2. 我们要有模块化和抽象思维,善于将大块的复杂逻辑提炼成类或者函数,屏蔽掉细节。
  3. 让阅读代码的人不至于迷失在细节中,这样能极大地提高代码的可读性。

避免函数参数过多

函数的参数大于等于5个以上时,会影响代码可读性,使用起来也不方便。针对这种情况,一般有2种处理方法:

  1. 考虑函数是否职责单一,是否能通过拆分成多个函数的方式来减少参数。
  2. 将函数的参数封装成对象。

勿用函数参数来控制逻辑

不要在函数中使用布尔类的标识参数来控制内部逻辑。这明显违背单一职责和接口隔离原则。

我们的建议将其拆成两个函数,可读性也要更好。

函数设计要职责单一

一个函数只描述一件事,保持函数的单一职责。

移除过深的嵌套层次

代码嵌套层次过深往往是因为if-else, switch-case,for 循环过度嵌套导致的。

建议超过2~3层就要思考一下如何减少嵌套。过深的嵌套本身理解起来就比较费劲。

4种常见的思路:

  1. 去掉多余的 if 或 else 语句。
  2. 使用编程语言提供的 continue,break, return 关键字,提前退出嵌套。
  3. 调整执行顺序来减少嵌套。
  4. 将部分嵌套逻辑封装成函数调用,以此来减少嵌套。

学会使用解释性变量

  1. 常量取代魔法数字。
  2. 使用解释性变量来解释复杂表达式。

统计编码规范

一个项目,一个团队,一个公司。一定要制定统主的编码规范,并且通过 Code Review 督促执行,这对提高代码质量有立竿见影的效果。

关于我

我的博客:https://yezihack.github.io

欢迎关注我的微信公众号【空树之空】,共同学习,一起进步~ 空树之空