Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >代码注释的艺术,再也不怕被说代码可读性差啦!

代码注释的艺术,再也不怕被说代码可读性差啦!

原创
作者头像
拾贰
修改于 2019-08-22 09:50:24
修改于 2019-08-22 09:50:24
9020
举报
文章被收录于专栏:前端讲堂前端讲堂

前言

可能现在不管大家去面试还是在公司上班都会涉及到代码可读性,或者是代码规范。优秀的代码注释可以提高代码可读性,当然优秀的命名规范也可以啦。我们这里就讨论一下代码注释。代码注释可能就相当于产品使用说明书,当别人看到你的代码的时候,知道你的代码是干嘛的,是怎么使用的。我们所熟悉的可能就是 // 是单行注释,/***/ 是多行注释,下面我们就来聊一聊代码注释!

文件注释

关于文件注释可能很多同学都没有用过,但大家都多多少少有看过文件注释。

比如我们熟悉的jQuery/vuejs/reactjs的文件注释:

代码语言:txt
AI代码解释
复制
// jQuery的文件注释
/*!
 * jQuery JavaScript Library v1.11.3
 * http://jquery.com/
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 *
 * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
 * Released under the MIT license
 * http://jquery.org/license
 *
 * Date: 2015-04-28T16:19Z
 */

// vuejs的文件注释
/*!
 * Vue.js v2.6.10
 * (c) 2014-2019 Evan You
 * Released under the MIT License.
 */

// reactjs的文件注释
/** @license React v16.8.6
 * react-dom.production.min.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
/*
 Modernizr 3.0.0pre (Custom Build) | MIT
*/

在这里我们可以大概了解到版权或者作者,又或者开源协议等信息。

在日常工作中我们也经常看到这样的文件注释:

代码语言:txt
AI代码解释
复制
/*
 * @Description: Description
 * @Author: js-say
 * @Date: 2019-05-23 17:57:10
 * @LastEditTime: 2019-05-23 17:57:10
 * @LastEditors: js-say
 */

这样的注释包括了描述、作者、创建时间、更新时间等。这样大家一眼就能知道这个文件大概实现了什么功能,开始是谁写的,最后维护的是谁。文件注释其实可以看自己公司要求和规范来写!使用 vs-code 的话有一个插件可以快捷生成文件注释,当然方法注释也是可以的。这里就只给插件名字啦,具体怎么使用大家可以自己研究一下!

插件:koroFileHeader

其实文件注释也有一些规范的:

代码语言:txt
AI代码解释
复制
/**
 * @file 对文件的描述,用于文件的头部
 * @author <name> [<emailAddress>] 代码的作者,在姓名后面用尖括号加上邮箱会被自动转成 mailto: 的链接
 * @copyright <some copyright text> 与@file结合使用,说明版权相关的信息
 * @license <identifier> 说明许可证相关的信息
 * @version 版本号
 */

大致一个文件注释可以是这样子的,还可以有很多比如 @desc 描述之类的,大家可以参考 jsDoc

代码块注释

代码块注释,也可以说是方法注释,可以提现出方法的用处,已经所需参数,返回值等;大大提高代码的可读性!

下面就是一个简单的方法注释:

代码语言:txt
AI代码解释
复制
/**
 * Represents a book.
 * @constructor
 * @param {string} title - The title of the book.
 * @param {string} author - The author of the book.
 */
function Book(title, author) {
  // ...
}

下面我就举几个例子:

class 的注释

代码语言:txt
AI代码解释
复制
/** Class representing a point. */
class Point {
    /**
     * Create a point.
     * @param {number} x - The x value.
     * @param {number} y - The y value.
     */
    constructor(x, y) {
        // ...
    }

    /**
     * Get the x value.
     * @return {number} The x value.
     */
    getX() {
        // ...
    }

    /**
     * Get the y value.
     * @return {number} The y value.
     */
    getY() {
        // ...
    }

    /**
     * Convert a string containing two comma-separated numbers into a point.
     * @param {string} str - The string containing two comma-separated numbers.
     * @return {Point} A Point object.
     */
    static fromString(str) {
        // ...
    }
}

class 继承

代码语言:txt
AI代码解释
复制
/**
 * Class representing a dot.
 * @extends Point
 */
class Dot extends Point {
    /**
     * Create a dot.
     * @param {number} x - The x value.
     * @param {number} y - The y value.
     * @param {number} width - The width of the dot, in pixels.
     */
    constructor(x, y, width) {
        // ...
    }

    /**
     * Get the dot's width.
     * @return {number} The dot's width, in pixels.
     */
    getWidth() {
        // ...
    }
}

module 注释

代码语言:txt
AI代码解释
复制
/** @module color/mixer */

/** The name of the module. */
export const name = 'mixer';

/** The most recent blended color. */
export var lastColor = null;

/**
 * Blend two colors together.
 * @param {string} color1 - The first color, in hexadecimal format.
 * @param {string} color2 - The second color, in hexadecimal format.
 * @return {string} The blended color.
 */
export function blend(color1, color2) {}

// convert color to array of RGB values (0-255)
function rgbify(color) {}

export {
    /**
     * Get the red, green, and blue values of a color.
     * @function
     * @param {string} color - A color, in hexadecimal format.
     * @returns {Array.<number>} An array of the red, green, and blue values,
     * each ranging from 0 to 255.
     */
    rgbify as toRgb
}

通过上面几个例子是不是很快的知道各代码的作用是什么,需要的参数是什么,这样子一来代码就可以很容易的被同事或者说下一个接手维护的人看懂!对于方法描述,参数描述就可以看团队公司来定是写成英语还是中文了。

下面是一些常用的注释标签

代码语言:txt
AI代码解释
复制
/**
 * @author  作者,方便定位    
 * @class(同义词:@constructor)标记类和构造函数    
 * @constant @const常量标记    
 * @description(同义词:@desc) 对内容进行描述    
 * @module 模块名称    
 * @enum 枚举类型标记    
 * @global 全局对象标记    
 * @param 函数参数标记    
 * @returns(同义词:@return)函数返回标记    
 * @this this指向标记    
 * @see 参考链接    
 * @memberof 标记模块间的从属关系    
 * @event 在模板中标记可以被触发的事件,与@fire配合使用
 * @alias 将成员视为具有不同的名称。
 * @Async 表示函数是异步的。
 * @augments(同义词:@extends)指示符号从父符号继承并添加到父符号。
 * @borrows 此对象使用来自另一个对象的内容。
 * @callback 回调函数。
 * @copyright 版权信息。
 * @default (同义词: @defaultvalue) 默认值。
 * @example 示例。
 */

还有很多,大家可以去 jsDoc 看相应的一些规范。

行注释

行注释的话,应该不用做太多的解释,直接用 // 注释相关信息就OK啦。当然 // TODO 习惯用这个得话也是非常不从的哟!

有趣的注释(无关主题,纯属娱乐,这条可以无视)

代码语言:txt
AI代码解释
复制
/**
 *                    _ooOoo_
 *                   o8888888o
 *                   88" . "88
 *                   (| -_- |)
 *                    O\ = /O
 *                ____/`---'\____
 *              .   ' \\| |// `.
 *               / \\||| : |||// \
 *             / _||||| -:- |||||- \
 *               | | \\\ - /// | |
 *             | \_| ''\---/'' | |
 *              \ .-\__ `-` ___/-. /
 *           ___`. .' /--.--\ `. . __
 *        ."" '< `.___\_<|>_/___.' >'"".
 *       | | : `- \`.;`\ _ /`;.`/ - ` : | |
 *         \ \ `-. \_ __\ /__ _/ .-` / /
 * ======`-.____`-.___\_____/___.-`____.-'======
 *                    `=---='
 *
 * .............................................
 *          佛祖保佑             永无BUG
 */

/**
 *  佛曰:
 *          写字楼里写字间,写字间里程序员;
 *          程序人员写程序,又拿程序换酒钱。
 *          酒醒只在网上坐,酒醉还来网下眠;
 *          酒醉酒醒日复日,网上网下年复年。
 *          但愿老死电脑间,不愿鞠躬老板前;
 *          奔驰宝马贵者趣,公交自行程序员。
 *          别人笑我忒疯癫,我笑自己命太贱;
 *          不见满街漂亮妹,哪个归得程序员?
 */

/**
 * _ooOoo_
 * o8888888o
 * 88" . "88
 * (| -_- |)
 *  O\ = /O
 * ___/`---'\____
 * .   ' \\| |// `.
 * / \\||| : |||// \
 * / _||||| -:- |||||- \
 * | | \\\ - /// | |
 * | \_| ''\---/'' | |
 * \ .-\__ `-` ___/-. /
 * ___`. .' /--.--\ `. . __
 * ."" '< `.___\_<|>_/___.' >'"".
 * | | : `- \`.;`\ _ /`;.`/ - ` : | |
 * \ \ `-. \_ __\ /__ _/ .-` / /
 * ======`-.____`-.___\_____/___.-`____.-'======
 * `=---='
 *          .............................................
 *           佛曰:bug泛滥,我已瘫痪!
 */

/***
 *      ┌─┐       ┌─┐ + +
 *   ┌──┘ ┴───────┘ ┴──┐++
 *   │                 │
 *   │       ───       │++ + + +
 *   ███████───███████ │+
 *   │                 │+
 *   │       ─┴─       │
 *   │                 │
 *   └───┐         ┌───┘
 *       │         │
 *       │         │   + +
 *       │         │
 *       │         └──────────────┐
 *       │                        │
 *       │                        ├─┐
 *       │                        ┌─┘
 *       │                        │
 *       └─┐  ┐  ┌───────┬──┐  ┌──┘  + + + +
 *         │ ─┤ ─┤       │ ─┤ ─┤
 *         └──┴──┘       └──┴──┘  + + + +
 *                神兽保佑
 *               代码无BUG!
 */


/***
 *                  ___====-_  _-====___
 *            _--^^^#####//      \\#####^^^--_
 *         _-^##########// (    ) \\##########^-_
 *        -############//  |\^^/|  \\############-
 *      _/############//   (@::@)   \\############\_
 *     /#############((     \\//     ))#############\
 *    -###############\\    (oo)    //###############-
 *   -#################\\  / VV \  //#################-
 *  -###################\\/      \//###################-
 * _#/|##########/\######(   /\   )######/\##########|\#_
 * |/ |#/\#/\#/\/  \#/\##\  |  |  /##/\#/  \/\#/\#/\#| \|
 * `  |/  V  V  `   V  \#\| |  | |/#/  V   '  V  V  \|  '
 *    `   `  `      `   / | |  | | \   '      '  '   '
 *                     (  | |  | |  )
 *                    __\ | |  | | /__
 *                   (vvv(VVV)(VVV)vvv)                
 *                        神兽保佑
 *                       代码无BUG!
 */


/***
 *
 *
 *                                                    __----~~~~~~~~~~~------___
 *                                   .  .   ~~//====......          __--~ ~~
 *                   -.            \_|//     |||\\  ~~~~~~::::... /~
 *                ___-==_       _-~o~  \/    |||  \\            _/~~-
 *        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
 *    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
 *  .~       .~       |   \\ -_    /  /-   /   ||      \   /
 * /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
 * |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
 *          '         ~-|      /|    |-~\~~       __--~~
 *                      |-~~-_/ |    |   ~\_   _-~            /\
 *                           /  \     \__   \/~                \__
 *                       _--~ _/ | .-~~____--~-/                  ~~==.
 *                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
 *                                 -_     ~\      ~~---l__i__i__i--~~_/
 *                                 _-~-__   ~)  \--______________--~~
 *                               //.-~~~-~_--~- |-------~~~~~~~~
 *                                      //.-~~~--\
 *                               神兽保佑
 *                              代码无BUG!
 */ 

拒绝拖延(感谢关注)

公众号:前端讲堂

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
个性代码注释 大合集
键盘 """ ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ │Esc│ │ F1│ F2│ F3│ F4│ │ F5│ F6│ F7│ F8│ │ F9│F10│F11│F12│ │P/S│S L│P/B│ ┌┐ ┌┐ ┌┐ └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───
JNingWei
2018/09/27
2K0
神级代码注释-这次是来搞笑的
https://github.com/Blankj/awesome-comment
酒馆丁老师
2020/09/08
7950
神级代码注释-这次是来搞笑的
分享一些有趣的代码注释
本文最后更新于 February 19, 2021,文中内容可能已过时,请谨慎使用。
雨临Lewis
2022/01/12
7760
神级代码注释鉴赏,喜欢就拿去用!
/***                                      *         瓦瓦            十              *        十齱龠己         亅瓦車己             *        乙龍龠毋日丶      丶乙己毋毋丶            *        十龠馬鬼車瓦      己十瓦毋毋             *         鬼馬龠馬龠十    己己毋車毋瓦             *         毋龠
良月柒
2019/08/06
4780
神级代码注释鉴赏,喜欢就拿去用!
代码注释:程序员的隐形艺术
在编程的世界里,代码注释是一份沉默的契约,它既是程序员与未来自己对话的桥梁,也是与他人沟通的窗口。然而,对于这份契约的履行,程序员们的态度却颇为复杂。有人视其为艺术,有人则视为负担,更有人对其持有双标的态度。那么,我是如何看到程序员不写注释这一现象的呢?
正在走向自律
2024/12/18
1010
代码注释:程序员的隐形艺术
代码注释的艺术,优秀代码真的不需要注释吗?
前天回家路上,有辆车强行插到前面的空位,司机大哥暴躁地拍着方向盘吐槽道“加塞最可恶了”,我问“还有更可恶的吗”,司机大哥淡定说道“不让自己加塞的”。似乎和我们很类似,我们程序员届也有这 2 件相辅相成的事:最讨厌别人不写注释,更讨厌让自己写注释。
从大数据到人工智能
2022/09/08
6220
doxygen教程_genedoc教程
 我们在编写代码的时候,最头疼的就属于说明书了,很多代码一边写具体代码,一边写说明书,Doxygen主要解决说明书问题,可以在我们写代码的时候讲注释转化为说明书,Graphviz主要是用于图形展示,html help workshop主要使用生成CHM文档。 1.Doxygen
全栈程序员站长
2022/11/15
4.7K0
doxygen教程_genedoc教程
如何提高代码的可读性? - 读《编写可读代码的艺术》
很多同行在编写代码的时候往往只关注一些宏观上的主题:架构,设计模式,数据结构等等,却忽视了一些更细节上的点:比如变量如何命名与使用,控制流的设计,以及注释的写法等等。以上这些细节上的东西非常影响代码的可读性。
用户2932962
2018/08/30
1.2K0
如何提高代码的可读性? - 读《编写可读代码的艺术》
规范JavaScript注释
//(双斜线)与代码之间保留一个空格,并且//(双斜线)与注释文字之间保留一个空格。
Dreamy.TZK
2020/06/28
13.5K0
前端代码相关规范
项目目录和文件的命名使用小写字母,避免使用大写或驼峰,多个单词以下划线 _ 分隔  如:my_project/cast_detail.js
书童小二
2018/09/03
2K0
前端代码相关规范
值得一看:老外的嵌入式编程规范
作为维护人员,如果收到的补丁明显与周围代码的编码风格不同,这是令人沮丧的。这是不尊重人的,就像某人穿着泥泞的鞋子走进一间一尘不染的房子。
AI 电堂
2021/07/02
1.3K0
JSON5 格式标准 Data Exchange Format 官方文档 中英双语
The JSON5 Data Interchange Format is a proposed extension to JSON that aims to make it easier for humans to write and maintain by hand. It does this by adding some minimal syntax features directly from ECMAScript 5.1.JSON5 数据交换格式是一个提议的 JSON 扩展,旨在通过直接添加一些来自 ECMAScript 5.1 的最小语法特性,使人类更容易手动编写和维护。
WTSolutions
2025/03/30
2100
Python 小型项目大全 61~65
ROT13 密码是最简单的加密算法之一,代表“旋转 13 个空格”密码将字母A到Z表示为数字 0 到 25,加密后的字母距离明文字母 13 个空格: A变成N,B变成O,以此类推。加密过程和解密过程是一样的,这使得编程变得很简单。然而,加密也很容易被破解。正因为如此,你会经常发现 ROT13 被用来隐藏非敏感信息,如剧透或琐事答案,所以它不会被无意中读取。更多关于 ROT13 密码的信息可以在en.wikipedia.org/wiki/ROT13找到。如果你想更一般地了解密码和密码破解,你可以阅读我的书《Python 密码破解指南》(NoStarch 出版社,2018)。
ApacheCN_飞龙
2023/04/12
6750
Python 小型项目大全 61~65
编写高质量可维护的代码:一目了然的注释
有一些人认为,好的代码是自我解释的。合适的命名和优秀的代码的确可以减轻开发人员阅读代码的工作量,对于不是特别复杂的代码可能确实可以做到自我解释。但并不是所有场景都可以做到这一点,我们一起来了解一下“注释”吧。
政采云前端团队
2020/10/09
1.3K0
编写高质量可维护的代码:一目了然的注释
大话 JavaScript(Speaking JavaScript):第二十六章到第三十章
本部分提供了使用 JavaScript 的技巧(最佳实践,高级技术和学习资源),并描述了一些重要的工具和库。
ApacheCN_飞龙
2024/01/12
2590
大话 JavaScript(Speaking JavaScript):第二十六章到第三十章
禅与 JavaScript 编程艺术, Zen and The Art of JavaScript Programming禅与 JavaScript 编程艺术
Zen and The Art of JavaScript Programming
一个会写诗的程序员
2018/08/17
1.2K0
Git 中文参考(四)
稍微冗长一点,并在名字后显示远程网址。注意:必须放在remote和subcommand之间。
ApacheCN_飞龙
2024/06/26
5000
前端开发规范之命名规范、html规范、css规范、js规范
在学习编程的时候,每次看到那些整齐规范的代码,心里顿时对这个程序员表示点点好感,有时,比如看到自己和朋友写的代码时,那阅读起来就是苦不堪言,所以,一些基本的开发规范是必须的,是为了自己方便阅读代码,也方便他人阅读修改代码。
IMWeb前端团队
2019/12/03
6.6K0
前端开发规范之命名规范、html规范、css规范、js规范
LeetCode 付费题目(一)
【题目】Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left node that shares the same parent node) or empty, flip it upside down and turn it into a tree where the original right nodes turned into left leaf nodes. Return the new root.
四火
2022/07/19
2.6K0
Python 小型项目大全 41~45
在这个碰运气游戏中,你掷骰子来收集星星。你掷得越多,你能得到的星星就越多,但是如果你得到三个头骨,你就失去了一切!这款快速多人游戏可以支持任意多的玩家,是聚会的理想选择。
ApacheCN_飞龙
2023/04/12
7730
相关推荐
个性代码注释 大合集
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档