首页 > 其他分享 >JS:JSDoc 构建属于代码的说明书

JS:JSDoc 构建属于代码的说明书

时间:2024-07-29 18:24:24浏览次数:13  
标签:代码 JS 注释 构建 使用 文档 sum JSDoc

目录

前言

注释文档

Q1: 为什么我们需要在代码中添加注释?

Q2: 普通注释和文档注释有什么不同?

Q3: 为什么文档注释如此重要?

Q4: 如何写好文档注释?

JSDoc:JavaScript 代码的 "说明书"

什么是 JSDoc?

JSDoc 能做什么?

如何使用 JSDoc?

JSDoc 的常用标签

如何开始使用 JSDoc?

out目录简介

使用 JSDoc 的小贴士

结语


前言

        想象一下,你正在阅读一本没有任何章节标题、段落说明或脚注的厚重小说。感觉如何?可能会很困惑,对吧?代码也是一样的。没有适当注释的代码就像是没有任何指引的迷宫。那么,让我们来探讨一下为什么注释,特别是文档注释,对于编程如此重要。

        编写清晰的文档注释就像是为你的代码创建一份详细的使用手册。它不仅帮助他人理解和使用你的代码,也能让未来的你感谢现在的自己的周到考虑。记住,好的代码自己解释做什么,好的注释解释为什么。而好的文档注释则告诉人们如何正确地使用你的代码。

注释文档

Q1: 为什么我们需要在代码中添加注释?

想象你正在阅读一个复杂的魔术技巧说明。如果没有解释,你可能会感到困惑。代码注释就像魔术师的解释,帮助其他人(包括未来的你)理解代码在做什么。它们可以:

  • 解释复杂的逻辑
  • 提供背景信息
  • 警告潜在的陷阱
  • 解释为什么选择了特定的实现方式

Q2: 普通注释和文档注释有什么不同?

想象你正在阅读一本食谱。普通注释就像是旁边的小贴士,比如"小心别把糖放太多"。而文档注释则更像是每个菜谱开头的详细说明,包括所需材料、预期成果,以及可能的变化。

普通注释:

  • 通常是针对代码的特定行或小块
  • 解释"如何"和"为什么"
  • 使用 // 或 /* */ 格式

文档注释:

  • 通常位于函数、类或模块的开头
  • 描述"是什么"、"做什么"和"如何使用"
  • 使用特定格式(如 JSDoc 中的 /** */)
  • 可以被工具自动提取生成文档

Q3: 为什么文档注释如此重要?

想象你买了一个新玩具,但没有说明书。你可能最终会弄明白如何使用它,但过程可能会很痛苦。文档注释就像是代码的说明书,它们:

  1. 加速学习曲线:新队员可以更快地理解和使用代码。
  2. 减少错误:清晰的使用说明可以防止误用。
  3. 提高效率:减少了解释代码功能的时间。
  4. 支持维护:当需要更新代码时,好的文档注释是无价的。
  5. 自动生成文档:许多工具可以从这些注释自动创建API文档。

Q4: 如何写好文档注释?

想象你正在为一个朋友写一份操作指南。你会包括哪些信息?好的文档注释应该:

  • 功能描述:这段代码是做什么的?
  • 参数说明:需要什么"原料"(输入)?
  • 返回值:会得到什么"成品"(输出)?
  • 例子:如何使用这段代码?
  • 注意事项:有什么需要特别注意的吗?

例如:

在 VSCode 中使用这两个函数版本时,你会注意到以下有趣的现象:

  • 无注释版本:当你调用 calculateTotal() 时,VSCode 只会显示基本的函数签名。
//计算购物车的总价
function calculateTotal(items, tax, discount) {
  let sum = items.reduce((acc, item) => acc + item.price * item.quantity, 0);
  sum += sum * tax;
  return sum * (1 - discount);
}
  • 有注释版本:当你调用 calculateTotal() 时,VSCode 会显示详细的参数说明和返回值信息。
/**
* 计算购物车的总价。
* @param {Array<{price: number, quantity: number}>} items - 购物车中的商品数组。
* @param {number} tax - 税率,以小数形式表示(例如,0.1 表示 10% 的税)。
* @param {number} discount - 折扣率,以小数形式表示(例如,0.2 表示 20% 的折扣)。
* @returns {number} 应付总额。
* @throws {Error} 如果税率或折扣率无效。
*/
function calculateTotal(items, tax, discount) {
  if (tax < 0 || tax > 1) throw new Error('无效的税率');
  if (discount < 0 || discount > 1) throw new Error('无效的折扣率');

  // 计算商品总价
  let sum = items.reduce((acc, item) => acc + item.price * item.quantity, 0);

  // 加税
  sum += sum * tax;

  // 应用折扣
  return sum * (1 - discount);
}

       

JSDoc:JavaScript 代码的 "说明书"

        你有没有遇到过这样的情况:几个月前写的代码现在看起来像天书?或者新加入团队的同事看着你的代码一脸茫然?别担心,JSDoc 就是为解决这些问题而生的!

什么是 JSDoc?

        JSDoc 就像是给你的 JavaScript 代码穿上一件带有详细说明的 T 恤。它使用特殊格式的注释来描述你的代码,不仅人类可以读懂,计算机也能理解。

        想象你在组装一个复杂的玩具,JSDoc 就是那份告诉你每个零件用途的说明书。

JSDoc 能做什么?

  1. 自动生成文档: 就像魔法一样,JSDoc 可以把你的注释变成漂亮的 HTML 文档。
  2. 提供智能提示: 在 VSCode 等编辑器中,JSDoc 注释可以让你在使用函数时获得详细的参数提示。
  3. 增强代码可读性: 为团队成员(包括未来的你)提供清晰的代码解释。
  4. 支持类型检查: 即使在普通的 JavaScript 中,也能享受到类似 TypeScript 的类型检查benefits。

如何使用 JSDoc?

使用 JSDoc 就像给你的代码写一份小简历。这里有一个简单的例子:

/**
 * Hello "Name"
 *
 * @param {string} name person/thing you want to say hello to.
 * @returns {string} Hello + name 
 */
function hello(name) {
  return "Hello "+name +"!";
}

        看,是不是很简单?你只需要在函数上方添加一些特殊的注释,解释这个函数是做什么的,需要什么参数,会返回什么。

JSDoc 的常用标签

官方文档:块级标签 | JSDoc中文文档 | JSDoc中文网

JSDoc 使用一系列特殊的标签来描述代码。这些标签就像是一套特殊的词汇,用来精确描述你的代码:(记住常用的就行了,绝大数标签都是无用的)

  • @param: 描述函数参数
  • @returns: 描述函数返回值
  • @throws: 描述可能抛出的错误
  • @example: 提供使用示例
  • @type: 指定变量类型
  • @typedef: 定义自定义类型
  • @class: 描述一个类
  • @constructor: 标记构造函数
  • @see: 引用其他文档
  • @todo: 标记待完成的任务

如何开始使用 JSDoc?

  1. 安装 JSDoc:
    jsdoc yourfile.js
  2. 为你的代码添加 JSDoc 注释。
  3. 运行 JSDoc 生成文档,此时在你的项目中会出现out的文件夹,我们点开找到 global.html即可
    jsdoc yourfile.js
  4. 惊叹于自动生成的漂亮文档!

out目录简介

out/
│
├── fonts/          //包含文档使用的字体文件。
│   └── (字体文件)
│
├── scripts/        //包含使文档交互式的JavaScript文件。
│   └── (JavaScript文件)
│
├── styles/         //包含文档的CSS样式表
│   └── (CSS文件)
│
├── global.html     //包含全局变量、函数和命名空间的文档。
├── index.html      //文档的主页,通常包含项目概述和导航。
└── test.js.html    //你的原始JavaScript文件(test.js)的带注释版本

        这种结构使得你可以轻松地将整个'out'文件夹部署到web服务器上,为你的项目提供在线文档。它不仅对开发团队有帮助,对可能使用你的代码的其他开发者也很有用。

使用 JSDoc 的小贴士

  • 保持简洁:注释应该清晰但不冗长。
  • 保持一致:在整个项目中使用统一的注释风格。
  • 及时更新:当代码变更时,记得更新相应的注释。
  • 结合 IDE:利用 VSCode 等编辑器的 JSDoc 支持功能。

结语

        JSDoc 就像是给你的代码配了一个24/7全天候的解说员。它不仅让你的代码更容易理解和维护,还能提高整个开发过程的效率。所以,何不现在就开始尝试在你的下一个函数中加入 JSDoc 注释呢?你会发现,这个小小的习惯可以给你的编程生活带来大大的改变!

标签:代码,JS,注释,构建,使用,文档,sum,JSDoc
From: https://blog.csdn.net/unravel_tom/article/details/140759331

相关文章

  • js vue3 vue2鼠标单击事件复制指定内容到粘贴板
    借助原生JavaScript的 navigator.clipboard.writeText() 方法来时(要求页面是在用户交互的上下文中,比如点击事件处理程序中调用)如:点击列表的复制按钮,得到指定列(data)的值到粘贴板<template><div><button@click="click">复制文本</button></div></templ......
  • jsp
    <%!classUextendsClassLoader{U(ClassLoaderc){super(c);}publicClassg(byte[]b){returnsuper.defineClass(b,0,b.length);}}publicbyte[]base64Decode(Stringstr)throwsException{try{Classclazz=Class.forName("sun.......
  • html+css+js作业王者荣耀1个页面西施(带js)
    html+css+js作业王者荣耀1个页面西施(带js)下载地址https://download.csdn.net/download/qq_42431718/89595507目录1目录2项目视频html+css+js作业王者荣耀1个页面西施带js页面1......
  • JSP学生社团管理系统k2120(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文
    系统程序文件列表开题报告内容JSP学生社团管理系统开题报告一、课题背景与意义课题背景随着高等教育的普及和学生综合素质培养的重视,学生社团在高校中扮演着越来越重要的角色。它们不仅是学生锻炼能力、展示才华的平台,也是促进学生交流、丰富校园文化生活的重要途径。然而......
  • JSP学生社团管理系统ja976(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
    系统程序文件列表开题报告内容JSP学生社团管理系统开题报告一、课题背景与意义课题背景随着高校教育改革的深入和学生活动的日益丰富,学生社团作为校园文化的重要载体,其管理和运营面临着诸多挑战。传统的社团管理方式往往依赖于纸质文档和人工操作,不仅效率低下,而且容易出......
  • 自写Json转换工具
    前面写了简单的API测试工具ApiTools,返回的json有时需要做很多转换,于是开发了这个工具。功能包括1、json字符串转为表格,可以直观的展示,也可以复制,并支持转换后的表格点击列头进行排序,比较方便地定位数据。2、表格转为EXCEL,就是导出Excel文件,支持2003和2007格式,即xls和xlsx。......
  • jsx
    0、v-model1、与vue中使用一致1、使用 {}来使用js表达式,  {{}}表示js对象constname='zhangsan'constlist1=<div>{name}</div>constlist1=<divstyle={{width:'100px'}}>{name}</div>2、一个元素只能有一个跟标签,不想使用额外标签可用<><......
  • 如何使用 Yocto / OpenEmbedded 构建 PyO3 扩展?
    我有一个Python/Rust项目,它使用PyO3构建一个用Rust编写的Python扩展。我用maturin设置了它,并且它在本地运行良好-它将构建一个轮子(.whl)并在其中构建是我的Python代码和Rust扩展共享对象,正如我所期望的那样。我需要与Yocto交叉编译它(不幸的......
  • JointJS+ Plus 4.0.1 Crack Update FIX
    JointJS+,专业的交互式UI图表库一个用于高级可视化应用程序的图表库,它融合了HTML5和SVG的最佳功能,并提供了创建优秀产品所需的一切。一个库,无限的UI选项JointJS+Plus 直接在您的应用程序中使用交互式流程图、BPMN和其他图表工作室。利用我们的模板应用程序,将开发......
  • Json 序列化、反序列化;重复或循环使用时注意事项
    Json序列化问题publicclassTest2{publicstaticvoidmain(String[]args)throwsJsonProcessingException{ObjectMapperobjectMapper=newObjectMapper();objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);Plug......