什么是好的注释?

本文探讨了注释的重要性和使用技巧,提倡清晰、维护性强的注释,同时批判了乱七八糟和过时注释的危害,强调了通过代码表达意图而非过度依赖注释的价值。

为什么要写注释?

什么也比不上防止良好的注释来的有用,什么也不会比乱七八糟的注释更有本事搞乱一个模块,什么也不会比陈旧、提供错误信息的注释更有破坏性。

所以良好的注释是提高代码质量重要的一环。

注释的恰当用法是弥补我们在用代码表达意图时遭遇的失败,如果发现自己需要写注释,就再想想看是否有办法用代码来表达。

注释存在时间越久,离其所描述的代码就越远,就越来越变得全然错误,原因是程序员没有坚持维护注释。

程序员应当负责将注释保持在可维护、有关联、精确的高度。

注意:注释不能梅花糟糕的代码,与其花时间编写解释你写出的糟糕代码的注释,不如花时间清理那堆糟糕的代码。

好注释

最好的注释是不写注释也能轻易的理解代码。

与法律有关的内容。例如版权及著作声明。

用注释来提供基本信息,如描述某个抽象方法的返回值。

对意图的注释。有时注释不仅提供了有关实现的有用信息,还反映了某个决定后面的意图。比如程序员在两个解决方案中选择了其中一个,其他阅读者或许不同意这个选择,但至少能知道他想干什么。

注释把某些晦涩难明的参数或返回值的意义,翻译为某种可读形式。

警示作用。用于警示其他程序员可能会出现某种后果的注释也是有用的。

注释可以用来放大某种看来不合理之物的重要性。

坏注释

喃喃自语型。如果只是因为你觉得应该或者因为过程需要就添加注释,那就要花必要的时间确保写出最好的注释,而不是谜团般的喃喃自语。

多余的注释。简单函数没必要写注释。通过函数名、变量名即可表达清楚意图。

日志式注释。如果在很久以前,在模块开始处创建并坚持维护这些记录还算有道理,否则只会令模块变得凌乱,应当删除。

位置标记。有的程序员喜欢在源代码中标记某个特别的位置,如一大串斜杠、一大串横线等,如果滥用标记,就会沉默在背景噪音中而被忽略。

注释掉的代码。直接把代码注释掉而不描述原因是最讨厌的做法。其他人不敢删除,他们会想,代码依然放在那,一定有其原因,而且这段代码很重要,不能删除。注释掉的代码堆积在一起,就像破酒瓶底的渣滓一般。

非本地信息。假如一定要写注释,请确保它描述了离它最近的代码。别在本地注释的上下文环境中给出了系统级的信息。

不明显的关系。注释及其描述的代码之间的联系应该显而易见,至少让读者能看到注释和代码、并且理解注释所谈何物。

### JSON 文件中的注释格式 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。然而,标准的 JSON 格式 **不允许直接使用注释**[^1]。如果尝试在 JSON 文件中加入类似于 `//` 或者 `/* */` 的注释语法,则会导致该文件无法被正确解析。 尽管如此,在实际开发过程中,有时确实需要为 JSON 数据添加一些解释性的文字来帮助理解其结构或用途。以下是几种常见的解决方案: #### 方法一:使用自定义键作为注释 可以通过引入特殊的键名(例如 `"comment"`),将其值设置为描述性字符串的方式实现类似的功能。这种方式虽然不是真正的注释,但在某些场景下可以起到相同的作用。 ```json { "comment": "这是用于记录用户信息的部分", "name": "张三", "age": 28, "address": { "city": "北京" } } ``` 这种方法的优点在于它完全兼容现有的 JSON 解析器;缺点则是增加了额外数据项,可能会污染原始模型[^4]。 #### 方法二:利用扩展版 JSON 工具支持带注释功能 部分第三方库提供了对含注释 JSON 文件的支持能力,比如 Python 中的 `demjson` 模块或者 JavaScript 下的一些插件等。它们能够识别并忽略掉特定形式下的备注内容后再转换成纯粹的标准对象表示法。 例如下面这段代码展示了如何借助此类技术处理包含单行或多行样式标注过的文档实例: ```javascript /** * 用户基本信息配置 */ { // 姓名字段 name: '李四', /* 年龄范围限定条件 */ ageLimit: [0, 150] } ``` 需要注意的是,上述例子仅适用于那些专门设计好的处理器上运行良好,并不代表常规意义上的合法 JSON 结构[^2]。 #### 方法三:预处理阶段移除所有注释 对于必须严格遵循 RFC7159 规范的情况来说,最好的做法就是在正式保存之前先执行一次清理操作——即将所有的非必要元素除去只留下核心有效负载即可完成最终版本创建工作流程如下所示: 假设初始状态存在这样的带有内嵌说明语句的目标源码片段: ```jsonc {/* 设置默认超时时间为3秒 */} "defaultTimeout": 3000, // 是否启用调试模式? "debugMode": false ``` 那么经过相应脚本逻辑转化之后得到的结果应该是这样子的样子: ```json {"defaultTimeout":3000,"debugMode":false} ``` 这种策略的优势非常明显因为它既保留了原有的可读性强的特点又满足了跨平台互操作需求同时还能避免潜在风险隐患发生几率大大降低[^3]. 综上所述,由于原生 JSON 不支持任何形式的注释机制所以我们通常采用以上三种变通手段之一解决问题具体选择取决于项目实际情况以及团队偏好等因素综合考量决定最佳实践方案.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值