`
猫耳呀
  • 浏览: 165637 次
社区版块
存档分类
最新评论

注释那些事儿:前端代码质量系列文章(一)

阅读更多
摘要: 好的注释可以提高代码的可读性和可维护性,从而提高代码质量。那么什么是好的注释?如何写出好的注释?
 
“Comment or not comment, that is the question”
 
好的注释可以提高代码的可读性和可维护性,从而提高代码质量。
 
那么什么是好的注释?如何写出好的注释?本文将从注释的目的和原则出发对 JS 注释进行探讨。
01
 
注释的目的和原则
 
注释的目的:
  • 提高代码的可读性,从而提高代码的可维护性
 
注释的原则:
  • 如无必要,勿增注释 ( As short as possible )
  • 如有必要,尽量详尽 ( As long as necessary )
 
我们写注释,是为了给代码的读者(包括我们自己,也可能包括机器,如 jsdoc)看,帮助读者阅读理解代码并进行维护。
 
如无必要,勿增注释」是指注释要避免过多过滥,不要为了注释而注释。多余的注释等价于冗余的代码,除了对增加可读性无益,一旦代码需要修改,修改注释也会是一大负担。
我们应当追求「代码自注释」,即代码本身就拥有较高的可读性(通过清晰的命名、合理的结构等)。举个例子:
 
// bad // 如果已经准备好数据,就渲染表格 if (data.success && data.result.length > 0) {  renderTable(data);   } // good const isTableDataReady = data.success && data.result.length > 0; if (isTableDataReady) {  renderTable(data); }
 
如有必要,尽量详尽」是指需要注释的地方应该尽量详尽地去写,以让阅读者可以充分了解代码的逻辑和意图为标准。
02
 
什么是好注释,什么是坏注释
 
根据注释的原则,我们应该以「能否帮助阅读者更好地阅读理解代码」为标准,判断一个注释「是否有必要」。
好的注释包括:
  • 帮助读者更好地了解代码逻辑和结构,例如:
init: function() {
 // 获取配置信息
 const config = getConfig();
 
 // 获取用户信息
 const userInfo = getUserInfo();
 
 // 根据配置和用户信息,进行初始化
 doInit(config, userInfo);
 
 // 如果存在自定义配置时的特殊逻辑
 if (config.custom) {
   ...
 }
}
  • 特殊或不易理解写法的解释说明,例如:
/**
* parseInt was the reason my code was slow.
* Bitshifting the String to coerce it to a
* Number made it a lot faster.
*/
const val = inputValue >> 0;
 
  • 特殊标记注释:如 TODO、FIXME 等有特殊含义的标记
  • 文件注释:部分规约会约定在文件头部书写固定格式的注释,如注明作者、协议等信息
  • 文档类注释:部分规约会约定 API、类、函数等使用文档类注释(如 jsdoc 风格)
  • 遵循统一的风格规范,如一定的空格、空行,以保证注释自身的可读性
坏的注释包括:
  • 注释对阅读代码无益:如本文第一个示例,本可以不用注释,用清晰的命名、逻辑进行代码自注释
  • 遵循统一的风格规范:如单行注释长度、空格、空行,例如:
 
// bad 单行注释过长,不易阅读,应写成多行
// parseInt was the reason my code was slow.Bitshifting the String to coerce it to Number made it a lot faster.
const val = inputValue >> 0;
 
// good
/**
* parseInt was the reason my code was slow.
* Bitshifting the String to coerce it to a
* Number made it a lot faster.
*/
const val = inputValue >> 0;
 
  • 情绪性注释:如抱怨、歧视、搞怪等(被发现你就跪了)
 
 
 
 
 
03
 
如何写好注释
 
 
注释规约
 
理解注释的目的和原则,制定并遵循一份注释规约,以保证注释的可读性和一致性
工具保障
 
 
比如使用 ESLint 保证注释风格的一致,使用 Sonar 检查项目注释率
 
04
 
注释规约
 
这里给出一份可供参考的注释规约(参考自airbnb规约):
 
4.1 【推荐】单行注释使用 //
注释应单独一行写在被注释对象的上方,不要追加在某条语句的后面:
// bad
const active = true; // is current tab
 
// good
// is current tab
const active = true;
 
注释行的上方需要有一个空行(除非注释行上方是一个块的顶部),以增加可读性:
 
// bad
function getType() {  
 console.log('fetching type...');  
 // set the default type to 'no type'  const type = this.type || 'no type';  
 return type; }
 
// good
function getType() {  
 console.log('fetching type...');  
 
 // set the default type to 'no type'  const type = this.type || 'no type';  
 return type; }
 
// good
// 注释行上面是一个块的顶部时不需要空行
function getType() {  
 // set the default type to 'no type'  const type = this.type || 'no type';  return type; }
 
4.2 【推荐】多行注释使用 /** ... */,而不是多行的 //
 
// bad // make() returns a new element // based on the passed in tag name function make(tag) {  // ...  return element; } // good /** * make() returns a new element * based on the passed-in tag name */ function make(tag) {  // ...  return element; }
 
4.3 【强制】注释内容和注释符之间需要有一个空格,以增加可读性。eslint: spaced-comment
 
// bad
//is current tab
const active = true;
 
// good
// is current tab
const active = true;
 
// bad
/** *make() returns a new element *based on the passed-in tag name */
function make(tag) {  
 // ...  return element; }
 
// good
/** * make() returns a new element * based on the passed-in tag name */
function make(tag) {  
 // ...  return element; }
 
4.4 【推荐】使用特殊注释标记
 
有时我们发现某个可能的 bug,但因为一些原因还没法修复;或者某个地方还有一些待完成的功能,这时我们需要使用相应的特殊标记注释来告知未来的自己或合作者。常用的特殊标记有两种:
  • // FIXME: 说明问题是什么
  • // TODO: 说明还要做什么或者问题的解决方案
 
class Calculator extends Abacus {  constructor() { super(); // FIXME: shouldn’t use a global here total = 0; // TODO: total should be configurable by an options param this.total = 0;  } }
 
4.5 【推荐】文档类注释,如函数、类、文件、事件等,使用 jsdoc 规范
例如:
 
/** * Book类,代表一个书本. * @constructor * @param {string} title - 书本的标题. * @param {string} author - 书本的作者. */ function Book(title, author) {  this.title=title;  this.author=author; } Book.prototype={  /**   * 获取书本的标题   * @returns {string|*}   */  getTitle:function(){ return this.title;  },  /**   * 设置书本的页数   * @param pageNum {number} 页数   */  setPageNum:function(pageNum){ this.pageNum=pageNum;  } };
05
工具
我们可以使用一些工具来保证注释质量,例如:
 
Eslint:保证一致的注释风格
 
ESLint 是当下最流行的 JS 代码检查工具,ESLint 中有一些注释相关的规则,用户可选择开启:
  • valid-jsdoc
  • require-jsdoc
  • no-warning-comments
  • capitalized-comments
  • line-comment-position
  • lines-around-comment
  • multiline-comment-style
  • no-inline-comments
  • spaced-comment
Sonar:检查项目的注释率
 
Sonar 是一个代码持续集成平台,它可以对代码进行静态扫描,得到项目的注释率数据。
 
注释率反应了注释行占总代码行的比例,注释率太低不好,但也不能盲目追求高注释率。
 
另外,同 Eslint 类似,Sonar 也有一些针对注释风格规则可以配置。
06
后记
理解注释的目的和原则,遵循一份注释规约并结合工具保证落地,可以使注释成为代码良好的辅助,增强可读性和可维护性,从而提高代码质量。
 
阅读更多干货好文,请关注扫描以下二维码:
 
分享到:
评论

相关推荐

    前端代码规范.pdf

    前端代码规范

    前端代码规范.rar

    "前端代码规范"这个压缩包文件很可能包含了一系列关于如何编写整洁、一致且易于理解的前端代码的指南。以下是对这些规范的一些核心内容的详细解读: 1. **命名规则**:前端代码规范通常会涵盖变量、函数、类以及...

    Eclipse 代码注释模板

    其中,代码注释模板是一项非常实用的功能,可以帮助程序员快速生成规范、一致的注释,提高开发效率并保持代码的可读性。 在Eclipse中,用户可以自定义代码注释模板,这通常涉及到类、方法、变量等不同类型的注释...

    推荐研究demo:豆瓣电影:代码中有大量注释(源代码+截图)

    推荐研究demo:豆瓣电影:代码中有大量注释(源代码+截图)推荐研究demo:豆瓣电影:代码中有大量注释(源代码+截图)推荐研究demo:豆瓣电影:代码中有大量注释(源代码+截图)推荐研究demo:豆瓣电影:代码中有大量注释...

    注释代码技巧 c#中 很详细的文章

    这篇文章将深入探讨C#中的注释代码技巧,旨在帮助初学者更好地理解和应用这些技巧。 首先,我们要了解C#中的两种基本注释类型:单行注释和多行注释。单行注释使用"//"开始,常用于快速添加临时或简洁的说明;多行...

    一种自动抽离web前端功能代码生成独立模板的方法.docx

    该方法为web前端开发提供了一种自动抽离功能代码生成独立模板的解决方案,可以提高开发效率和代码质量,提高开发者的工作效率和生产力。 此外,该方法还可以应用于其他领域,如软件开发、代码生成等,可以为开发者...

    代码注释率统计工具下载

    代码注释是编程实践中至关重要的一个环节,它有助于提高代码的可读性和可维护性。注释率是指源代码中的注释行数占总代码行数的比例,通常用来衡量代码的文档质量。`linecount`是一款用于统计代码注释率的工具,其...

    掌握代码注释的艺术:C++中的注释管理与实

    在C/C++编程中,代码注释是确保软件可维护性和可读性的关键。良好的注释不仅帮助开发者理解代码逻辑,还能...在编写本文时,参考了多篇关于Doxygen使用和代码注释最佳实践的文章,这些资源为本文提供了宝贵的信息和示例

    VS2013代码注释

    Visual Studio 2013(VS2013)作为一款强大的集成开发环境(IDE),提供了一系列方便的工具来辅助程序员进行代码注释的工作。本文将详细介绍如何在VS2013中利用其内置功能自动生成代码注释,并对文件和函数进行注释...

    图书管理系统前端代码设计

    综上所述,《图书管理系统前端代码设计》提供了前端开发的全套解决方案,使开发者能够专注于后端业务逻辑的实现,同时享受到高质量、功能完善的前端界面。通过深入理解和应用这套代码,开发者不仅可以快速构建图书...

    pxcook前端注释工具

    总的来说,PxCook作为一款强大的前端注释工具,它的像素测量、元素注释和颜色取样等功能,极大地简化了前端开发过程中的设计还原工作,提高了团队的协作效率,并确保了设计的精准实施。无论是在个人开发还是团队合作...

    Java代码注释率检查器.rar

    本资源"Java代码注释率检查器"是一个专门用于检查Java源代码中注释比例的工具,帮助开发者确保代码质量达到一定的标准。 `CodeCheck.jar` 文件是该检查器的执行程序,通常是一个Java的可运行JAR文件,包含了所有...

    管理系统cms前端代码

    这个项目包含了一系列与收银管理相关的页面,如订单管理、用户信息查看、服务选择、销售查询等功能,展示了前端开发中的常见实践和设计规范。 1. **HTML**:HTML(HyperText Markup Language)是网页的基础结构语言...

    source insight comment 添加代码注释

    代码注释是编程实践中不可或缺的一部分,它有助于提高代码的可读性和可维护性。通过注释,开发者可以记录代码的功能、逻辑和设计决策,使得团队成员或未来自己在回顾代码时能快速理解其工作原理。 二、Source ...

    分享:Java代码注释template

    本话题将探讨“Java代码注释template”,这是一个关于如何通过模板来标准化Java代码注释的实践。 在Java开发中,注释被用来解释代码的功能、用途和实现方式,以便于其他开发者阅读和理解。注释模板通常包括类注释、...

    去除源代码注释

    在编程世界中,源代码注释是极其重要的,它们提供了对程序逻辑的解释,帮助开发者理解和维护代码。然而,在某些特定情况下,如编译优化、代码混淆或仅需执行无注释版本时,可能需要去除源代码中的注释。本文将深入...

    java、前端代码规范(阿里巴巴).zip

    Java和前端代码规范是软件开发中的重要组成部分,尤其是在大型企业如阿里巴巴这样的公司中,它们对于保持代码质量和团队协作至关重要。本压缩包包含了阿里巴巴制定的Java和前端开发的详细规范,帮助开发者遵循一致的...

    阿里前端开发规范.pdf

    阿里前端开发规范是一个非常严格的开发规范,它涵盖了前端开发的各个方面,旨在提高开发效率、代码质量和团队协作。遵循该规范,可以帮助开发者编写出高质量的代码,提高开发效率和代码维护性。

    前端-代码走查模板.docx

    在前端项目管理中,代码走查是一个至关重要的环节,它有助于规范开发行为,统一团队内的编码风格,并且能够提前发现并修复潜在的问题,提高代码质量和软件稳定性。代码走查不仅是一种质量保证手段,而且能够促进团队...

    前端js代码规范

    ### 前端JS代码规范详解 #### 一、引言 随着前端技术的不断发展,JavaScript作为一门重要的编程语言,在Web开发中扮演着至关重要的角色。为了提高代码的可读性和可维护性,制定一套统一的编码规范显得尤为重要。...

Global site tag (gtag.js) - Google Analytics