前往小程序,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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微信小程序 带参二维码 纯Java实现
本文原创首发CSDN,链接 https://blog.csdn.net/qq_41464123/article/details/106335476 ,作者博客https://blog.csdn.net/qq_41464123 ,转载请带上本段内容,尤其是脚本之家、码神岛等平台,谢谢配合。 ----
Designer 小郑
2023/08/01
3620
微信小程序 带参二维码 纯Java实现
BufferedImage 将照片logo添加到二维码中间
猫头虎
2024/04/08
1750
BufferedImage 将照片logo添加到二维码中间
JAVA 将图片剪裁成圆形,并在圆形外带有白边
最近在做关于社交项目时,用到了二维码中间带图片logo的功能,但是要求图片为圆形,于是找到了java剪裁图片为圆形的工具类,并同时在圆形外围带有白边,不多说,直接上代码:
一诺千金
2020/04/30
5.4K1
Java如何实现二维码?【附源码】
第一步首先创建一个普通的 Maven 项目,然后要实现二维码功能,我们肯定要使用别人提供好的 Jar 包,这里我用的是 google 提供的 jar,pom.xml 文件配置如下:
好好学java
2020/12/21
1.6K0
Java如何实现二维码?【附源码】
Java 生成透明图片
设置图片透明import org.apache.commons.io.FilenameUtils;import org.apache.commons.io.IOUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import javax.imageio.ImageIO;import javax.imageio.stream.ImageOutputStream;import javax.swing.\*;import java.awt.\*
IT小马哥
2022/12/31
1.2K0
java贪吃蛇小游戏(详解)[通俗易懂]
首先给出代码下载地址(含素材):https://share.weiyun.com/8hkvy1Ja
全栈程序员站长
2022/09/07
1.8K0
java贪吃蛇小游戏(详解)[通俗易懂]
java 利用 pdfbox 实现PDF转为图片
当时放到测试环境后一直显示乱码,看了下报错是说字体不存在。第一个想法是在主机上安装字体,但是又有问题了,生产不可能这样吧,运维也不同意啊。
Li_XiaoJin
2022/06/10
4.1K0
java 利用 pdfbox 实现PDF转为图片
mapboxGL中sprite生成与引用
用过mapboxGL的都知道里面有个叫做sprite的配置,它的主要用途就是地图上渲染图标的,但是大多数情况下我们需要自定义图标的,我们该怎么办呢,莫着急,牛老师有招,本文告诉你如何通过几行简单的java代码实现,用引用到我们的地图中。
牛老师讲GIS
2020/06/11
1.2K0
JavaUtil_03_图片处理工具类
 一、源码 功能:缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等 package com.ray.dingtalk.util; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Toolkit; i
shirayner
2018/08/10
1K0
java 图片加水印(图片或者文本)
对于上传的图片,有时候我们需要加上水印来标识图片的来源,以下java代码用来处理图片加文字和图片水印
日薪月亿
2019/05/14
3.5K0
Google zxing 生成带logo的二维码图片
SmileNicky
2023/10/19
4680
Google zxing 生成带logo的二维码图片
基于Java实现图像浏览器的设计与实现
推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。 https://www.captainbed.cn/f1
鲜于言悠
2024/07/03
2410
基于Java实现图像浏览器的设计与实现
Java 2022圣诞树+2023元旦倒计时打包一起领走
2022最后一个月充满了期待,平安夜、圣诞节、元旦节;2023年也是一个早年,因此关于程序方面的浪漫,大家应该趁早准备。下面我将分享一个元旦的倒计时和圣诞树的绘制核心代码。大家可以依据自身的需求,稍微调整即可用。
非喵鱼
2022/12/14
1K0
Java 2022圣诞树+2023元旦倒计时打包一起领走
java——记录一次条形码、二维码、订单自动生成的制作
链接:https://pan.baidu.com/s/12mJTx7TkbK2HiWDgcT_jbQ 提取码:di1y
不愿意做鱼的小鲸鱼
2022/09/26
1.3K0
java——记录一次条形码、二维码、订单自动生成的制作
回敬Python蹭女神热度助发朋友圈,Java实现头像分成九宫图,再生成拼图头像
于是,我点开文章后,大概看了下文章的意思,其实就是把一个图片分成九宫图,即拼图的碎片,既然Python都能实现,作为回应,java必然也是可以做到的。
软件测试君
2020/07/31
8160
回敬Python蹭女神热度助发朋友圈,Java实现头像分成九宫图,再生成拼图头像
图片添加二维码水印教程
继之前博客PDF添加二维码水印教程:https://smilenicky.blog.csdn.net/article/details/91655064, 本博客介绍一下用jdk awt实现图片加文字水印和图片水印的方法
SmileNicky
2019/06/15
1.1K0
SpringMVC框架开发登录界面的验证码
本博客介绍如何开发登录界面的验证码 先写个验证码生成的Controller类: package com.appweb.controller.login; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.font.FontRenderContext; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedI
SmileNicky
2019/01/17
1.6K0
二维码服务拓展(支持logo,圆角logo,背景图,颜色配置)
二维码的基础服务拓展 zxing 提供了二维码一些列的功能,在日常生活中,可以发现很多二维码并不仅仅是简单的黑白矩形块,有的添加了文字,加了logo,定制颜色,背景等,本片博文则着手于此,进行基础服
一灰灰blog
2018/02/06
2.7K0
二维码服务拓展(支持logo,圆角logo,背景图,颜色配置)
【果壳信奥编程】纯 JAVA 实现植物大战僵尸
一枚大果壳
2024/05/18
1500
【果壳信奥编程】纯 JAVA 实现植物大战僵尸
Java文字转图片防爬虫
最近部分页面数据被爬虫疯狂的使用,主要就是采用动态代理IP爬取数据,主要是不控制频率,这个最恶心。因为对方是采用动态代理的方式,所以没什么特别好的防止方式。
conanma
2021/12/06
7K0
推荐阅读
相关推荐
微信小程序 带参二维码 纯Java实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档