余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

花5分钟规范「代码注释」

xiyangw 2022-11-26 16:41 21 浏览 0 评论

【注释】从技术上来说没有对错,理论上,你想怎么写就怎么写,你爱怎么写就怎么写!

但它确实也会对我们造成影响,尤其是在多人协同开发的系统中。杂乱的注释也会让你或你的队友头疼~

花5分钟规范「代码注释」

所以,我们需要规范一下注释。那什么才是好的注释呢?我们先来看看什么是不好的注释!

注释冗余

我们往往会写一段注释来说明“这是什么”。比如:

// Find all the users
let users = userHelper.findAll();

// Add score to each user
users.forEach((user) => {
	user.score++;
}
						
// Return the users
return users;

但是这段代码本身的意思就很清楚了,再附上注释就有点多余了。

所以我们应该将其剔除。

let users = userHelper.findAll();

users.forEach((user) => {
	user.score++;
}
						
return users;

那么,这段代码是不是就方便阅读了呢?其实,咱们还能更进一步:

let users = userHelper.findAll();
userHelper.incrementScoreForAll(users);						
return users;

这样你感觉如何?相比于最开始的那段代码,这段是不是就看得舒舒服服

所以,可读的代码比可读的注释更重要。优先考虑让你的代码说话,实在不行,再附上简短、清晰的注释。

注释未更新

// Find all users
let users = userHelper.findBanned();

// Give each user 100 extra score
users.forEach((user) => {
	user.score = 0;
}

return users;

我们有时候会发现注释和代码并不匹配,比如这里为用户设置分数的操作。代码中是 0 分,注释却是 100 分。

导致出现这种情况有多种可能:

  1. 我们总是在从其它地方复制代码,有时也会一并复制注释,然后在为己所用的过程中,修改了代码却没有修改对应的注释。
  2. 我们同时也在不断的根据产品需求调整代码(比如此处设置分值),修改代码也可能会忘记修改之前写的注释。

怎么办?让我们来看看优解:

// userHelper.js
function updateScoreForUsers(score, users) {
  users.forEach((user) => {
	  user.score += score;
  }
}

// Code 1: punish banned users
let users = userHelper.findBanned();
userHelper.updateScoreForUsers(users, -100);
return users;

// Code 2: give everybody 1 extra score
let users = userHelper.findAll();
userHelper.updateScoreForUsers(users, 1);
return users;

这样写将设置分数的逻辑封装成函数进行了抽离,功能更强了,也更易于阅读了。

现在,我们可以在多种情况下重复调用它,且不必担心注释未及时更新的问题了。

注释太长

请问如果是这样的注释,你还有信心整个完整读下来吗?即使你是一个勇敢坚强的技术人,读下来也会消耗很多时间吧?这样低效率的事肯定不是我们想要的。

// userHelper.js
/**
 * Mass updates the user score for the given a list of user
 * The score will be updated by the amount given in the parameter score
 * For example, if the parameter score is 5, the users will all receive 5 extra score
 * But if the score is negative, it can also be used. In that case, the score will be decreased by 5.
 * If you set score as 0, then this method will be useless as nothing will be updated.
 * If you set the score as a non number value, the function will not do anything and return false
 * just to ensure the score is not messed up after updating it with a non-number value
 * Try to avoid using non-number values in the score parameter as this should not be used like that
 * If you do however choose to use Infinity in the score argument, it will work, because Infinity is considered as a number in JavaScript
 * If you set the score to Infinity, all the users score will become Inifinity, because n + Infinity where n is a number, will always result in Infinity
 * Regarding the users, make sure this is an array! If it is not an array, we will not process the users score,
 * then our method will simply return false instead and stop processing
 * Also make sure the users array is a list of actual user objects, we do not check this, but make sure the object has all the required fields as expected
 * especially the score object is important in this case.
 * @returns {boolean} Returns true if successful, false if not processed.
 */
function updateScoreForUsers(score, users) {
  if (isNaN(score) || typeof users !== 'array') { return false; }
  
  users.forEach((user) => {
	  user.score += score;
  }
                
  return true;
}

所以,请确保你的注释不要太长。有那么多想说的,可以写文档、可以写文章,不要写注释~

简单直接是最迷人的!

注释太短

这是另一个极端的例子,但是它确实源自于现实的开发项目中。

// userHelper.js
/**
 * Update score
 * @returns {boolean} result
 */
function updateScoreForUsers(score, users) {
  if (isNaN(score) || typeof users !== 'array') { return false; }
  
  users.forEach((user) => {
	  user.score += score;
  }
                
  return true;
}

此段代码注释只是说明了返回值,但是更为关键的传参并未作出释义。显得有些尴尬~

如果你决定注释,那就不要只写一半。请尽量准确、完整、干净的将其写出。从长期来看,你一定会从中受益。

好的注释

好的注释就是告诉大家你为什么要进行注释!

比如:

// userHelper.js
function updateScoreForUsers(score, users) {
  users.forEach((user) => {
    user.score += score;
    
    // VIPs are promised 500 extra score on top
    if (user.type == 'VIP') {
      user.score += 500;
    }
  }
                
  return true;
}

此例中我们可以明白 VIP 用户是被产品要求多加 500 分值的。这样其它开发就不会对此产生疑惑。

如果代码由多个团队维护,简单直接的小标注就更为必要了!

小结

注释在代码中扮演很重要的角色。本瓜还记得大学老师说:注释应该占代码的三分之一。

我们都有不同的注释习惯,但是也应该有一个基本的指导:

  1. 注释应当简短、清晰,长篇大论稍边边。
  2. 告诉大家你 “为什么” 写这个注释,而不是告诉大家这段代码 “是什么”“是什么” 应该交给代码本身去解释。这个最为关键!
  3. 保持你的注释持久维护,也就是记得及时更新和与代码匹配。

代码可读就是最好的注释。

我是掘金安东尼: 一名人气前端技术博主(文章 100w+ 阅读量)

终身写作者(INFP 写作人格)

坚持与热爱(简书打卡 1000 日)

我能陪你一起度过漫长技术岁月吗(以梦为马)

觉得不错,给个三连吧(这是我最大的动力 )


相关推荐

Appium环境部署(一)——JDK的下载、安装与配置

一、JDK的下载1、官网下载(需注册账号,免费下载)https://www.oracle.com/java/technologies/downloads/#java8-windows(找符合自己系统的...

java环境的搭建,关于jdk的下载,附安装包(javajdk下载与安装教程)
java环境的搭建,关于jdk的下载,附安装包(javajdk下载与安装教程)

大家好,我是劲雨波,这篇文章主要是给大家提供jdk的安装包和环境变量的配置。其实,jdk是Java的一个运行环境,Java虚拟机。关于它的安装过程,我想大家第一...

2023-03-21 19:58 xiyangw

Java api中文版,离线下载,提供百度,谷歌,有道三个版本
Java api中文版,离线下载,提供百度,谷歌,有道三个版本

Java1.8帮助文档中文–谷歌版在线版:https://blog.fondme.cn/apidoc/jdk-1.8-google/下载链接:http:...

2023-03-21 19:57 xiyangw

Java学习——5、Jdk的下载和安装(Java学习——5、Jdk的下载和安装)

视频加载中......

Linux/Windows系统安装JAVA教程(linux安装教程)
Linux/Windows系统安装JAVA教程(linux安装教程)

说明:我们很多时候都需要用到JAVA环境,这里博主就记录下安装过程,目前最新版JAVA为10.0.2。1、获取最新版JAVA下载链接首先进入JAVA下载地址:点...

2023-03-21 19:56 xiyangw

初识Java(初识年岁尚温柔轻)

1.什么javaJava是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承,指针等概念,因此Java语言具有强大的功能和简单易用的两个特征,Java语言作为静态...

Java文件上传与下载(java文件上传下载io流)

基础环境:springboot2.X+jdk1.8+hutool工具包文件上传1.其中首行path由yml文件配置2.如果是linux系统,需要更改为/data/usr这种格式。3.返回体...

简单几步教你免费玩到JAVA版我的世界,电脑小白也能做到

为了免费玩到游戏,我们需要一个(第三方)启动器,这里以广受好评的HMCL启动器(免费的)为例1.HMCL是由Java语言制作的,所以我们需要先下载安装JAVA,打开浏览器,访问java.com进...

关于java文件下载的思路(关于java文件下载的思路是什么)

今天在一个群里扯了半天的给一个初入职场的新手解释文件下载的问题,在此来总结下。文件下载有两种方式:静态文件下载静态文件直接下载,设置下响应头即可。//请求路径dowload@RequestMappi...

Java基础视频教程:第十二节:JDK的下载过程图解
Java基础视频教程:第十二节:JDK的下载过程图解

Java基础视频教程:第十二节:JDK的下载过程图解视频加载中...想要了解更多Java知识那就来关注我们吧!精彩内容多多哦!不从错过哦!多多关注...

2023-03-21 19:55 xiyangw

java web项目如何批量下载文件(java批量下载多线程)

背景:根据浏览器的不同,下载文件需要的插件也有所不同,同时在下载个数的也有要求,比如IE浏览器,下载文件的个数如果超过50,则会出现问题。以下介绍一个不依赖任何插件。跨浏览器的实现是方式。import...

JAVA FTP上传/下载文件(Hutool使用)(java sftp 上传 下载)

轻松愉快搞定ftp上传下载文件,这里推荐使用hutool的工具类,本人实测超级好用几行代码搞定。1、项目maven引入hutool依赖包,我这里用的5.3.4的包<dependency>...

Windows/MacOS下Java开发环境的安装和配置详细教程
Windows/MacOS下Java开发环境的安装和配置详细教程

第一步:下载和安装JDKJDK(JavaDevelopmentKit)是Java开发所必须的工具包,它包含了Java编译器、Java虚拟机和其他必要的工具。...

2023-03-21 19:53 xiyangw

Java JDK下载与安装教程(jdk的下载与安装教程)

下载JDK:访问Oracle官网(www.oracle.com)下载最新版本的JDK,根据系统位数(32位或64位)选择下载。安装JDK:双击下载的安装包,按照安装向导安装即可。配置环境变量:在系统变...

前端安全之XSS(前端安全策略有哪些)

前言在了解xss漏洞之前,先了解同源策略,同源要求的是同协议、同域名、同端口才能算作同一个源站,才可以互相访问资源获取资源内容,但是现代互联网中,有很多第三方的js需要加载到自己的站点下,比如百度统计...

取消回复欢迎 发表评论: