高质量编程-编码规范之代码格式和注释

news2024/11/23 11:57:07

前言: \textcolor{Green}{前言:} 前言:

💞这个专栏就专门来记录一下寒假参加的第五期字节跳动训练营
💞从这个专栏里面可以迅速获得Go的知识

本次文章不仅仅是在 go 中主要注意,在编写其他语言中也同样重要。因为我们是一个团队,主张的是团队合作,编写的代码都是给他人看的,我们编写一个好的代码会给他人带来乐感。同时在面试的时候,面试官看到你写的代码岂不是开开心心的。必须写的明明白白的,接下来就一起学习吧。

本文中还有后续等待发布,编码规范远不止这么点,我会加紧更新的。

本次学习的目标:如何编写更简洁清晰的代码

本章内容主要是讲解高质量编程包含以下三个内容

  • 高质量编程简介
  • 编程规范
  • 性能优化建议

高质量编程

  • 一、高质量编程
    • 1.1 简介
    • 1.2 编码规范
      • 1.2.1 编码规范 - 代码格式
      • 1.2.2 编码规范 - 注释
      • 总结
  • 参考

一、高质量编程

1.1 简介

什么是高质量:编写的代码能够达到正确可靠简洁清晰的目标。

同时还需要考虑到以下情况

  • 正确性:各种边界条件是否考虑完备,错误的调用是否能够处理
  • 可靠性:异常情况或错误的处理策略是否明确,依赖的服务出现异常是否能够处理。保证稳定性。
  • 简洁:逻辑是否简单,是否能够快速支持后续调整功能或新增功能。
  • 清晰:在阅读代码的的时候能否清晰明了,重构或修改功能是否不会出现担心无法预料的问题。也就是易读易维护

编程原则

实际应用场景是千变万化的,尤其是各种语言的特性和语法各不相同。但是高质量编程遵循的原则是相同的。这就是之前和大家说过的,之前使用java过程中也会有高质量编程的规范,所以无论世界怎么变化,原则是不变的。

注意以下几点

  • 简单性
    • 消除“多余的复杂性”,以简单清晰的逻辑编写代码
    • 不理解的代码无法修复改进

    在实际应用过程中,复杂的程序逻辑难以重构和优化。因为无法明确预知调整造成的影响范围。难以理解的逻辑,排查道德问题也很难定位,不知道如何修复。

  • 可读性
    • 代码是写给人看的,而不是机器。
    • 编写可维护代码的第一步是确保代码可读。

    在项目的迭代过程中,后续的工作是对已有功能的完善或扩展,基本上很少完全对某个功能去掉,对应的代码也会存在很长时间。所以一个代码的可读性是非常有必要,否则会占用很多人的时间。

  • 生产力
    • 团队整体工作效率非常重要。

    我们作为程序猿相信对这个已经不陌生了,讲究的是团队合作,讲究一个工作效率。在 GO 中为了降低新手的上手 Go 的成本,GO 还通过工具强制统一所有代码格式。

整体的编码,所有人遵循规范,可以避免常见缺陷的代码,降低后续测试、验证、上线等各个节点出现的概率,即使出现问题,也可以快速排查定位。

1.2 编码规范

如何编写高质量的 Go 代码

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

1.2.1 编码规范 - 代码格式

  • 推荐使用 gofmt 自动格式化代码
    • 要保证所有的 go 代码与官方推荐格式保持一致。
    • gofmt 是 go 语言官方提供的工具,能自动格式化 go 语言代码为官方统一风格。
    • 很方便进行配置,像 Golang 内置了相关功能,直接开启就可以在保存文件的时候自动格式化了。常见的 IDE 都支持方便的配置。
  • goimports
    • 这也是 Go 语言官方提供的工具。
    • 这个也会对依赖包进行管理,实际等于 gofmt 加上依赖包管理。
    • 自动增删依赖的包引用,将依赖包按字母排序分类,具体情况下具体分析。

1.2.2 编码规范 - 注释

我们不能只关注代码实现,还需要关注注释,这个是非常重要的,也是容易忽视的。

简介

  • 注释应该遵循以下四点
    1. 注释应该解释代码作用
    2. 注释应该解释代码如何做的
    3. 注释应该解释代码实现的原因
    4. 注释应该解释代码什么情况会出错

接下来引用一句话
Good code has lots of comments, bad code requires lots of comments
好的代码有很多注释,坏代码需要很多注释 ---- Dave Thomas and Andrew Hunt


1.注释应该解释代码作用

注释应该解释代码作用

  • 适合注释公共符号:例如对外提供的函数注释描述它的功能和用途,只有在函数的功能简单而明显时才能省略这些注释(例如:简单的取值和设值)。

另外注释要避免啰嗦,不要对显而易见的内容进行说明,有些可以通过名称就知道内容。

Go 仓库
github连接

image.png

像第一白框中的注释显得就多了,没有必要。

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

  • 适合注释实现过程
    image.png

第二种注释是对代码中复杂的,并不明显的逻辑进行说明,适时注释实现过程。
上面的代码是给新 URL 加上最近的 refer 信息,并不是很明显,所以需要注释说明。

下面的例子是不正确的:虽然对过程进行了注释,但是描述的是显而易见的流程,不要用自然语言直接翻译代码作为注释,信息冗余,有时候表述不一定和代码一致。

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

  • 适合解释代码的外部因素。(这些因素脱离上下文后是很难理解的)
  • 提供额外的上下文
    image.png

图中可以看到: shouldRedirect = false。如果没有对其进行注释,很难明白为什么要设置 false;

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

  • 适合解释代码的限制条件或者无法处理的情况
    image.png

例如图中函数的注释说明是否存在性能隐藏,输入的限制条件,可能存在哪些错误情况,让使用者无需了解实现细节。同时也介绍了了解时区字符串的流程,同时对可能遇到的不规范字符串处理进行了说明。

公共符号始终要注释

  • 包中声明的每个公共的符号:变量、常量、函数以及结构都需要添加注释。

  • 任何既不明显也不简短的公共功能必须予以注释

  • 无论长度或复杂程度如何,对库中任何函数都必须进行注释。
    image.png
    上图中的注释结合之前的注释,表述了函数的功能和如何工作。

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

    • 例如图中的注释没有告诉你这个方法做了什么什么,甚至让你去看其他文档,这种情况建议删除。
      image.png
  • 对于公共符号都有注释说明
  • 尽管 LimitedReader.Read 本身没有注释,但它紧跟 LimitedReader 结构的声明,明确它的作用。
  • image.png

总结

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

参考

高质量编程简介及编码规范

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/684115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单片机介绍选型(嵌入式学习)

单片机介绍&选型 单片机介绍常见的单片机单片机如何选型 单片机介绍 单片机(Microcontroller)是一种集成电路芯片,具有处理器核心、存储器、输入/输出接口和各种外设的功能。 单片机是单片微型计算机的简称,MCU是Microcontro…

15. WebGPU 相机

在上一篇文章中,我们必须将 F 移到视锥体前面,因为 mat4.perspective 函数 将眼睛放在原点 (0, 0, 0) 并且把对象 放到 位于眼前 -zNear 到 -zFar 之间的视锥体中。这意味着,任何想要显示的东西,都需要放在这个空间里。 在现实世…

对英雄联盟英雄属性数据的预处理及相似度矩阵计算

目录 一、引言 二、任务1 1、填充缺失值 2、用中位数填充“生命值”属性列缺失值 3、 用均值填充“生命值”属性列缺失值 三、任务2 注:英雄联盟英雄属性数据资源可在博客资源中自行获取。 一、引言 英雄联盟作为一款古早的刀塔游戏,可谓之刀塔游…

jumpserver-v2.2.2【部署教程】

目录 什么是 跳板机 跳板机的缺点 使用堡垒机的优势 jumpserver的组件 【1】时间同步 【2】安装依赖 【3】修改数据库字符集、创建远程用户 【4】创建python的虚拟环境,用于专门运行jumpserver的环境 【5】获取jumpserver的代码 【6】安装编译环境依赖 …

【管理系列-09】软件成本怎么评估,知己知彼才能做软件造价

项目来了,总要叫来几个人,讨论一下成本是多少,能不能接,作为研发经理,能够较为合理的评估成本是一项必备技能,如何科学合理的评估,达到对内对外都满意,我想这是每个研发经理的必修课…

管理类联考——逻辑——知识篇——分析推理——四、数字——haimian

数字 题型识别 与数字相关的分析推理题在逻辑科目中扮演着非常重要的角色,可能涉及方程、不等式、分子与分母比值关系、百分比、概率、集合运算等,可结合数学方法或利用数字规律进行解题。 思维导图 常用公式 从某种意义上说,数学本身就是…

五、浅析[ElasticSearch]底层原理与分组聚合查询

目录 一、ElasticSearch文档分值_score计算底层原理1.boolean model2.relevance score算法2、分析一个document上的_score是如何被计算出来的 二、分词器工作流程1.character filter、tokenizer、token filter2、内置分词器的简单介绍3、定制分词器3.1默认的分词器--standard3.…

《教我兄弟学Android逆向13 xpose改机开发01-环境设置》

上一篇 《教我兄弟学Android逆向12 编写xposed模块》 我们了解了xpose的基本原理并一起搭建了xpose的hook环境,你也很好的完成了课后作业,但是通过后面的测试练习你发现xpose在不同系统环境的安装方法是不一样的,在我们之前的低系统手机上面直接安装就能…

LNMP六个实验

目录 访问状态统计配置 基于授权的访问控制 基于客户端的访问控制 基于域名的 Nginx 虚拟主机 基于IP 的 Nginx 虚拟主机 基于端口的 Nginx 虚拟主机 总结 访问状态统计配置 查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS 模块 修改 nginx.conf 配置文件,…

Python基础四

目录 一、Python数据类型--列表 1.列表的下标 2.访问列表中的元素 3.更新列表元素 4.删除列表元素 5.列表脚本操作符 6.列表截取与拼接 截取 拼接 7.嵌套列表 8.列表比较 二、Python内置函数--列表相关 一、Python数据类型--列表 Python中的列表类似于java的数组 列…

Rust语言从入门到入坑——(7)Rust 错误处理

文章目录 0 引入1、可恢复错误2、可恢复错误递归3、不可恢复错误4、kind 方法5、总结 0 引入 Rust 有一套独特的处理异常情况的机制,程序中一般会出现两种错误:可恢复错误和不可恢复错误。 1、可恢复错误的典型案例是文件访问错误,如果访问一…

RVEA算法

RVEA 1 目标函数2 预备知识3 参考向量引导选择4 更新参考向量5 流程6 代码7 运行效果 1 目标函数 min ⁡ X f ( X ) ( f 1 ( X ) , f 2 ( X ) , . . . , f M ( X ) ) \min_{\small{X}} \pmb{f(\small{X})} (f_1(\small{X}), f_2(\small{X}), ..., f_M(\small{X})) Xmin​f(X)…

数据结构——快速排序的介绍

快速排序 快速排序是霍尔(Hoare)于1962年提出的一种二叉树结构的交换排序方法。快速排序是一种常用的排序算法,其基本思想是通过选择一个元素作为"基准值",将待排序序列分割成两个子序列,其中一个子序列的元素都小于等于基准值&am…

DAY29:回溯算法(四)组合总和+组合总和Ⅱ

文章目录 39.组合总和思路伪代码为什么传入i而不是i1,不会导致无限循环 完整版剪枝优化剪枝修改完整版补充:std::sort升降序的问题(默认升序) 40.组合总和Ⅱ思路最开始的写法debug测试:逻辑错误修改完整版:…

营销策划报告个人心得

营销策划报告个人心得篇1 20__年3月27日晚,我们12级市营专业的同学们早早的来到了大成楼。根据网络营销与策划课程实训要求,覃希老师邀请了校外企业经理给我们进行产品培训。 我们按实训项目分别安排在C302和C304教室培训,培训中同学们认认真…

基于深度学习的高精度水果检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度水果(苹果、香蕉、葡萄、橘子、菠萝和西瓜)检测识别系统可用于日常生活中或野外来检测与定位水果目标,利用深度学习算法可实现图片、视频、摄像头等方式的水果目标检测识别,另外支持结果可视…

OpenGL 模板测试

1.示例效果图 选中模型对象,出现模型轮廓。 2.简介 当片段着色器处理完一个片段之后,模板测试会开始执行,和深度测试一样,它也可能会丢弃片段。接下来,被保留的片段会进入深度测试,它可能会丢弃更多的片…

MongoDB集群管理(三)

MongoDB集群管理 集群介绍 为什么使用集群 随着业务数据和并发量的增加,若只使用一台MongoDB服务器,存在着断电和数据风险的问题,故采用Mongodb复制集的方式,来提高项目的高可用、安全性等性能。 MongoDB复制是将数据同步到多个…

LNMP (Nginx网站服务) nginx 平滑升级

目录 1.1 Nginx的简介 1.2 Apache与Nginx的区别 Nginx对比Apache的优势: 1.3 Nginx的进程 Nginx的两个进程: 同步,异步,阻塞,非阻塞的概念补充 阻塞与非阻塞 同步和异步 2.1 编译安装Nginx 2.1 .1 关闭防火墙…

两点边值问题的有限元方法以及边值条件的处理示例

文章目录 引言题目补全方程刚度矩阵构造基底边值条件非齐次左边值条件非齐次右边值条件非齐次非齐次边值条件有限元方程 求数值解直接求总刚度矩阵先求单元刚度矩阵 引言 本文参考李荣华教授的《偏微分方程数值解法》一书 题目 对于非齐次第二边值问题 { − d d x ( p d u …