《代码大全 2》观后感(五):注释 —— 代码与 “未来” 的对话

news/2025/11/6 20:57:55/文章来源:https://www.cnblogs.com/Ou20051216/p/19197715

关于 “注释”,我过去有两个极端:要么觉得 “代码自己能说明白,不用写注释”,要么觉得 “多写注释总没错,哪怕是‘int a=0; // 定义 a 为 0’这种废话”。而《代码大全 2》对注释的观点,彻底改变了我的认知:注释不是 “代码的补充”,而是 “代码与未来维护者(包括未来的自己)的对话”,关键是 “解释为什么,而非是什么”。
书中举了一个例子:如果代码是 “if (userRole == 3)”,注释写 “// 判断用户角色是否为 3” 就毫无意义 —— 因为代码本身已经说明白了 “是什么”;但如果注释写 “// 用户角色 3 代表管理员,只有管理员能执行此操作”,就非常有价值,因为它解释了 “为什么要这么判断”,未来维护者不用去查 “角色 3 是什么含义”,能快速理解逻辑。我突然想起自己之前写的一段代码:“// 延迟 1000 毫秒”,对应的代码是 “Thread.sleep (1000)”。后来我自己看这段代码时,疑惑了半天:“为什么要延迟 1 秒?是等接口返回,还是避免频繁请求?” 如果当初注释写 “// 延迟 1 秒是为了等待上游接口数据同步,避免获取到空值”,就不会有这种困惑了。
书中还强调,要避免 “冗余注释” 和 “过时注释”。冗余注释会增加阅读负担 —— 比如每一行代码都写注释,反而让核心逻辑被淹没;而过时注释比没有注释更可怕,比如代码改了,但注释没改,会误导维护者。我曾遇到过这种情况:代码里判断条件是 “if (age > 18)”,但注释写的是 “// 未成年人不能操作”,显然代码改了(从 <=18 改成了 > 18),注释没改,我当时差点按注释的逻辑去修改代码,幸好发现得早。后来我养成了习惯:改代码的同时一定要更注释,并且定期检查注释是否和逻辑一致。
现在我写注释时,会先问自己:“这段代码的逻辑,过半年我还能看懂吗?别人看的时候会有疑问吗?” 只在 “为什么这么做”“特殊情况是什么”“关键逻辑的背景” 这些地方写注释。比如复杂的算法逻辑、临时的兼容处理、需要注意的边界条件,这些注释能帮未来的自己和同事节省大量时间。《代码大全 2》让我明白,注释不是 “任务”,而是 “责任”—— 对代码负责,也对后续维护者负责。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/958096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

库相关的操作

系统数据库 MySQL安装自带的一些数据库 information_schema : 虚拟库不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等 performance_schema : MySQL 5.5开始新增的一个数…

Cloudflare中的“托管质询”、“JavaScript质询“、”交互式质询”区别 - 狼人:

Cloudflare中的“托管质询”、“JavaScript质询“、”交互式质询”区别2025-11-06 20:50 狼人:-) 阅读(0) 评论(0) 收藏 举报Cloudflare提供了多种质询机制来区分正常用户和恶意流量,主要包括托管质询、JavaScrip…

数字识别模型

import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import fetch_openml from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier fro…

洛谷 P5327

给定一棵大小为 \(n\) 的树和 \(m\) 条链 \(s_i, t_i\),询问有多少对 \((u, v)\) 满足 \(u, v\) 同时在一条链上? \(n, m \le 10^5\)一个十分暴力的做法:把一条链剖成 \(\log n\) 个区间,那么这 \(\log n\) 个区间…

2025年AI/LLM安全围栏/护栏/安全网关选型深度评估

2025年AI/LLM安全围栏/护栏/安全网关选型深度评估面向对外服务或内部开放的大语言模型(LLM)与多模态应用,AI应用安全围栏/护栏/安全网关(亦称 LLM-WAF / Guardrails)已成为“输入+上下文+输出”三段式防护与RAG 越…

完整教程:mysql表的操作——mysql表的约束

完整教程:mysql表的操作——mysql表的约束pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

鸿蒙应用开发零基础入门:从工具到语言,轻松开启第一步

鸿蒙应用开发零基础入门:从工具到语言,轻松开启第一步随着鸿蒙生态的蓬勃发展,越来越多的开发者对鸿蒙应用开发产生了浓厚的兴趣。如果你是一名开发者,但对鸿蒙还一无所知,不知从何入手,那么这篇博客就是为你准备…

通过重写组件轻松掌握用JSX写Vue项目

最近接手 Vue JSX 项目,因久未使用 JSX,便通过先以 Vue 标准模板实现含常用功能的组件,再用 JSX 重写的方式,对比两者语法差异,总结使用选择,以此快速重拾 Vue 中 JSX 写法,前言 因工作原因,最近接手一个Vue的…

[Python刷题记录]-两两交换链表中的节点-链表-中等

[Python刷题记录]-两两交换链表中的节点-链表-中等链接:24. 两两交换链表中的节点 - 力扣(LeetCode) 直接写1 # Definition for singly-linked list.2 # class ListNode(object):3 # def __init__(self, val=0,…

#在线工具,柜位图工具

机房设备杂乱、布局规划耗时耗力?每次调整机柜都要反复手绘、核对尺寸?这款 42U 机柜管理工具简直是 IT 运维人的 “救星”,让机柜布局设计变得简单又高效! 可视化操作,布局设计零门槛 不用复杂绘图软件,不用专业…

洛谷 P3233

给定一棵有 \(n\) 个节点的树和 \(T\) 组询问。每组询问给定 \(m\) 个关键点,设 \(f(y)\) 表示离 \(y\) 最近的关键点(多个取编号最小。)请回答对于每个关键点 \(x\),有多少个 \(f(y) = x\)。 \(n, \sum m \le 3 \…

组件理解

HDFS(Hadoop分布式文件系统)的思路特别实在:切分+多节点备份DataNode:多节点存,还怕丢数据?切好的小数据块,会分散存到集群里的“DataNode”(存储节点)上。 NameNode:“大脑”记位置,不用瞎找,这么多DataN…

Lazarus在linux下独立守护进程(无外部依赖,自动脱离终端)

Lazarus在linux下独立守护进程(无外部依赖,自动脱离终端)一、以前用 pid := FpFork;if pid = 0 thenbegin // 主循环endelsebegin Halt; // 父进程退出end; 发现有的系统能运行。有的系统退出终端后运行一会就自动…

搜维尔科技:Xsens动作捕捉系统实时捕捉人体运动数据,为人形机器人提供拟人化动作训练和实时控制支持

在机器人技术飞速发展的当下,实现机器人精准模仿人类动作并实时响应操作指令,已成为推动产业升级的关键。Xsens动作捕捉系统凭借其高精度、实时性和环境适应性,成为训练与控制人形机器人的核心工具,重新定义了人机…

“模型法线到视图法线”的变换矩阵(normal matrix)的计算和作用

“模型法线到视图法线”的变换矩阵(normal matrix)的计算和作用“模型法线到视图法线”的变换矩阵(normal matrix)作用:用于在 光照计算(lighting) 中,将 模型空间中的法线方向 正确地转换到 视图空间(或摄像…

首批凭借!华为云CodeArts Snap智能开发助手通过可信AI智能编码设备评估,获当前最高等级

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

去年夏天

还有什么等待 还有什么悲哀 这故事中的人不太精彩 夏去了又回来 而人却已不在 它重复着我汹涌的忍耐 今年兰花又开 开了它也会败 我想要一个人活得精彩 有些人总会来 有些人在我心中在徘徊 我拿了总会还 你拿了就逃开 …

pythontip 字符串首位连接

字符串的连接‘+’ str1+str2 收到多个字符串使用input_str存储 调用时列表起始0 input()得到的字符串列表存储 input_str[0]+input_str[-1] def join_first_last(input_str): return input_str[0]+input_str[-1] 输入…

aspose-pdf 修改pdf文件备忘录

public class PatchedLicense {public static DateTime NewParseExact(string s, string format, IFormatProvider provider){return new DateTime(2099, 12, 30);}public static void Run(){MethodHookManager.Instan…