注释应该声明代码的高层次意图,而非明显的细节html
反例java
说明算法
上文方法用于根据参数生成签名,注释中详细描述了签名算法的实现步骤,这其实就是过分描述代码明显细节编程
正例api
总结数组
在文件/类级别使用全局注释来解释全部部分如何工做编程语言
正例函数
总结工具
一般每一个文件或类都应该有一个全局注释来概述该类的做用spa
公共api须要添加注释,其它代码谨慎使用注释
反例
说明
以上接口提供dubbo rpc服务属于公共api,以二方包的方式提供给调用方,虽然代码简单缺乏了接口概要描述及方法注释等基本信息。
正例
总结
公共api必定要有注释,类文件使用类注释,公共接口方法用方法注释
在注释中用精心挑选的输入输出例子进行说明
正例
总结
对于公共的方法尤为是通用的工具类方法提供输入输出的例子每每比任何语言都有力
注释必定要描述离它最近的代码
反例
说明
该方法有一行代码从map里删除了一个数据,注释放在了put调用以前,而没有直接放在remove以前
正例
总结
注释要放在距离其描述代码最近的位置
注释必定要与代码对应
反例
说明
注释中说明生成随机字符串的长度不能超过16字符,实际代码已经修改成32个字符,此处注释会产生误导读者的反作用
正例
总结
必定要给常量加注释
反例
正例
总结
给每个常量加一个有效的注释
巧用标记(TODO,FIXME,HACK)
示例
配置标记
能够扩展IDE修改标记的配置,好比加入解决人,关联缺陷等信息,以IDEA为例修改入口以下:
总结
适当添加警示注释
正例
说明
该方法建立了一个大小固定为1且类型为Map的数组链表,这个用法比较奇怪,须要注释说明缘由
总结
代码里偶尔出现一些很是hack的逻辑且修改会引发较高风险,这个时候须要加注释重点说明
注释掉的代码
反例
说明
常见套路,为了方便须要的时候从新复用废弃代码,直接注释掉。
正例
同上,删除注释部分代码
总结
不要在代码保留任何注释掉的代码,版本管理软件如Git能够作的事情不要放到代码里
循规蹈矩式注释
反例
说明
分析上述代码能够发现两处注释很是别扭和多余:
正例
总结
日志式注释
反例
说明
修改已有代码不少人会手动添加注释说明修改日期,修改人及修改说明等信息,这些信息大可能是冗余的
正例
代码同上,删除该注释
总结
不要在代码中加入代码的著做信息,版本管理能够完成的事情不要作在代码里
“拐杖注释”
反例
说明
示例代码简单实现了更新指定map k-v等功能,若是目标map不存在则使用指定k-v初始化一个map并返回,方法名为 updateConfigWithSpecifiedKV ,为了说明方法的完整意图,注释描述了方法的实现逻辑
正例
总结
抛弃“拐杖注释”,不要给很差的名字加注释,一个好的名字比好的注释更重要
过分html化的注释
反例
说明
类注释使用了大量的html标签用来描述,实际效果并无带来收益反而增长阅读难度
正例
总结
Java
文件/类注释规范
目前IDE安装 灵狐 后会自动配置IDE的file templates为以下格式:
强烈建议使用如上配置,统1、简洁就是最好。__若是有特殊须要须要定制类注释能够参考下图:
方法注释
IDE提供了统一的方法注释模版,无需手动配置,好的方法注释应该包括如下内容:
举个例子:
块注释与行注释
Python
文件注释
重点描述文件的做用及使用方式
类注释
函数注释
多行注释与行尾注释
Golang
行注释
经常使用注释风格
包注释
/**/ 一般用于包注释, 做为一个总体提供此包的对应信息,每一个包都应该包含一个doc.go用于描述其信息。
JavaScript
经常使用/**/与//,用法基本同Java。
Shell
只支持 # ,每一个文件都包含一个顶层注释,用于阐述版权及概要信息。
其它
待完善
本文先总结了注释在编程中的最佳实践场景并举例进行了说明,而后就不一样编程语言提供了一些注释模版及规范相关的实践tips。关于注释我我的的认知是:注释即代码,注释即文档,写好注释一个工程师必备的素质之一,在整洁代码前提下,更少的注释是跟高的追求。关于注释的实践暂时写到这里,后面会持续完善,也欢迎你们提供好的tips,文中代码大多出自于平常业务项目,也有部分摘自开源库,如有不妥之处敬请指正。
本文做者:竹涧
本文为云栖社区原创内容,未经容许不得转载。