如何给代码写好注释

好的代码优于大量注释

如果出现了代码坏味道,首先考虑的应该是重构。带有少量注释的整洁而有表达力的代码,要比带有大量注释的零碎而复杂的代码像样的多。

好注释

法律信息

有时,公司代码规范要求编写与法律有关的注释。对于此类注释,只要有可能,就指向一份标准许可或者其他外部文档,而不是把所有条款放在注释中。此类注释,应充分利用IDE的模板生成功能,将公司文档模板加入到IDE自动生成注释功能中。

提供信息

如果代码无法准确表示需要传达的信息,就需要注释来表达代码需要承担的职责。下面是一个例子:

// format matched kk:mm:ss EEE, MMM dd, yyyy
Pattern timeMatcher = Patter.compile("\\d*:\\d*\\d* \\w*, \\w* \\d*, \\d*);"

本例中,正则表达式匹配一个经由SimpleDateFormat.format函数利用特定格式字符串格式化的时间和日期。值得注意的是,如果这段代码出现在某个转换时间格式的类中,注释就变得毫无意义。

解释意图

有时,程序员会因为一些具体的原因,使用某个决定。此处情况,注释是一个好的向后来者(交接人或者未来的自己)传达信息的途径。

阐释含义

有时,有些代码晦涩难懂,或者作为调用者你无法修改接口名称时,可以增加注释帮助增加代码的可读性。下面是一个例子

assertTrue(aa.compareTo(ab) = -1);  //aa < ab

本例中,compareTo是已经定义好的接口,开发者无法修改命名。-1作为返回值无法准确表达aa ab直接的关系。此时增加注释是最好的手段。

警示

当你在调试或运行代码时,通常会踩到一些坑。此时增加注释,可警示后来者防止他们犯同样的错误。部分语言中,可能会有装饰器承担此类工作。

@Ignore(Takes too long to run)

TODO

TODO通常是程序员认为应该做,但由于某些原因还没有做的工作。它可能时要删除某个非必要的特性,或者要求他人注意某个问题。当前好的IDE都提供了特别的手段来定位TODO,这种方式可以让开发者快速定位到当前需要做的工作。
当然,有些公司的代码规范中,要求发布版本不允许出现todo注释,因为这可能带来安全风险或者商务风险。这类情况应视具体情况而定。

//todo a sample needed 

放大

注释可以放大某种看起来不合理代码的重要性。

//the trim is important! It remove the starting space that could could cause error match
String str = matched.group(3).trim(); 

公共API

标准JAVA库中的javadoc或者Python库中api注释,都是开发者开发程序中的好帮手。如果你在编写公共API,就该为它编写良好的doc。标准库中的注释,可以作为学习的模板,好好学习临摹下。

坏注释

多余型

如果一个函数,读者能够很容易的就读出来代码要表达的意思。注释就是多余的。例如:

# when a>b return true,and when a<=b return false
if(a>b):
  return True
else:
  return False

本例中代码清晰无歧义,读注释纯粹是浪费时间。

误导型

尽快初衷可嘉,但是程序员有时候会写出不够精确的注释。这种误导型,将误导后来者,甚至不如不加注释。

日志式

有人喜欢在每次编辑代码时,在模块开始时增加一套注释。此功能应该由代码管理工具(svn/git)来承担,而非注释。后来者在读代码时,只需要知道这段代码为什么这么做,而非它的来世今生。

/*
* 2021-01-03 Fixs bugs in add()
* 2021-02-07 Fixs errors when add 5 and 4
* 20210-03-08 Add function in add
*/

废话式

此类注释通常为了满足某些编程规范,在没必要加注释的地方强行加注释。

String date; //date
String version; //version
Int id; //id

标记式

有些程序员喜欢在代码中标记特别位置。此类注释,通常随着时间推移逐渐膨胀,真正有用的信息会沉默在背景噪声中。

// debug @@@@@@@@@@@@@
// fix large number //////////////////////////

括号后面的注释

此类注释,在很长的括号后增加标记。这种功能,同样应让IDE来承担。或者缩短括号体中的代码行数。

while(xxxxx){
  xxxx
  ......
  xxxx
} //while

签名式

// Add by rock 2020-12-25

此类注释毫无意义,且会搞脏代码。随着时间推移,这注释将会越来越无用,因为这行代码与原作者会越来越没关系。同时,此类注释会增加代码被社会工程学攻击的风险。如果想帮助后来者找到原作者,应充分使用代码管理工具(svn/git)的能力。如果使用vscode作为IDE,推荐使用Gitlens来查找代码作者。

注释掉的代码

直接注释掉代码而不是删除,是一个愚蠢的做法。其他人不敢删除注释掉的代码,因为他们会想代码放在那儿肯定有原因。他们也不敢放开注释,因为他们不知道为什么注释掉。如果怕代码丢失,同样可以用代码管理工具来进行管理。

非本地信息

如果你一定要写注释,确保它描述了距离它最近的代码。如果在非本地增加了注释,我们无法确保真正的代码逻辑修改之后,这里的注释也会修改。

def setVaule(val):
  # set value of xxx, default to 1024
  self.val = val

本例中,default 1024非本地逻辑。如果未来有修改,不修改注释也能过UT,很容易漏掉修改。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容