注释三要素与代码保护
背景、设计意图、关键约束缺一不可;禁止静默删除代码与依赖
本页解决的问题
先给结论「注释三要素与代码保护」要解决的关键问题是什么?
背景、设计意图、关键约束缺一不可;禁止静默删除代码与依赖
把品味变成产品可重复的行为。 有用的结果不是一句“我觉得更好”。它应该是一条看得见的规则、一个小例子,以及判断体验何时低于标准的方法。
记录一个前后对比,让别人不用听解释也能看懂质量线。
表面更精致了,却没有减少用户的不确定感。
代码只能表达「做了什么」。为什么存在、为什么这样实现、调用时要注意什么,这些信息只有写进注释才能跨时间留存。「写好注释」四个字 AI 执行不了,必须给出固定结构和示例。
背景
这个函数为了解决什么业务问题、在什么场景下被调用。没有背景,读代码的人只能看到实现,看不到它为什么存在。
设计意图
为什么这样实现,选择这种方案的理由,以及放弃了哪些备选方案。git log 里找不到这些,注释是唯一载体。
关键约束
调用方须知:副作用、依赖关系、边界条件等非显而易见的注意点。少了这条,下一个调用者就会踩坑。
点击切换同一个 merge_chat_history 函数的两种注释写法,对比它们留下的信息量。
三个真实情景,判断 AI 应该怎么做。点选项即时判定,并给出对应的规则依据。
已答对 0 / 3 题
注释保护
重构时禁止以「注释太长」「代码自解释」「顺便清理」为由删除背景和设计意图注释。实现变了导致注释不准确时,必须同步更新内容。判断标准只有一条:未来接手的人,没有这条注释还能理解当初为什么这样做吗?
代码删除声明
删除任何已有功能代码前,必须明确告知用户并说明理由,禁止以「顺手清理」「看起来没用」为由静默删除。认为某段代码该移除时,先标注 // TODO: 建议移除 - 原因:xxx,拿到许可再删。
禁止空 catch。所有 try/catch 和错误分支必须有实质性处理:日志记录 + 用户可见的错误提示,或合理的降级逻辑。仅 console.log(e)、pass、// ignore 都属于静默吞错,一律不允许。
注释的使命是留存代码无法表达的决策信息。三要素结构让 AI 写得出来,保护规则让它删不掉,两者配合才能跨越时间。
从「问题在哪」把感觉变成判断
「代码只能表达「做了什么」。」指出,AI 降低了做出“能用”成品的门槛,读者真正需要练的是看出哪里不对,并把感觉说成可以执行的要求。
观察用户的下一步,而不是只看表面
「这个函数为了解决什么业务问题、在什么场景下被调用。没有背景,读代码的人只能看到实现,看不到它为什么存在」可以转成几个可观察的问题:用户是否知道现在发生了什么,是否知道下一步做什么,出错或空白时能否恢复,以及信息层级是否让重要内容先被看见。
漂亮不等于容易用
把「注释的使命是留存代码无法表达的决策信息。」用在第二个页面或流程上,记录一个具体犹豫点和一个改动后的用户动作;能被观察到的变化,才是体验改善。
从「问题在哪」走到「三要素结构」
「问题在哪」先把问题落在「代码只能表达「做了什么」。 为什么存在、为什么这样实现、调用时要注意什么 ,这些信息只有写进注释才能跨时间留存。「写好注释」四个字 AI 执行不了,必须给出固定结构和示例」上;到了「三要素结构」,讨论继续推进到「这个函数为了解决什么业务问题、在什么场景下被调用。没有背景,读代码的人只能看到实现,看不到它为什么存在」。两段连起来,重点就不只是记住一个结论,而是看清它成立所依赖的条件。
把这条判断带到下一个场景
评估体验时,把抽象的“好看”或“顺手”换成用户动作:他是否看懂状态、找到了下一步、能从错误中恢复,并且愿意继续使用。
- 「问题在哪」:代码只能表达「做了什么」。 为什么存在、为什么这样实现、调用时要注意什么 ,这些信息只有写进注释才能跨时间留存。「写好注释」四个字 AI 执行不了,必须给出固定结构和示例
- 「三要素结构」:这个函数为了解决什么业务问题、在什么场景下被调用。没有背景,读代码的人只能看到实现,看不到它为什么存在
- 「配套规范 · 错误处理」:禁止空 catch。 所有 try/catch 和错误分支必须有实质性处理:日志记录 + 用户可见的错误提示,或合理的降级逻辑。仅 console.log(e) 、 pass 、 // ignore 都属于静默吞错,一律不允许
最后的「配套规范 · 错误处理」把讨论落到「禁止空 catch。 所有 try/catch 和错误分支必须有实质性处理:日志记录 + 用户可见的错误提示,或合理的降级逻辑。仅 console.log(e) 、 pass 、 // ignore 都属于静默吞错,一律不允许」。回看这条线索时,最值得保留的是:当输入、规模或风险改变,哪些判断需要重新做一遍。
我把这篇文章里的一个判断改写成了今天可以验证的小实验。比记住结论更有用的是,知道下一步要观察什么。
读完以后我先回头找它成立的条件,而不是直接把方法搬进项目。这个顺序让后面的取舍清楚很多。
如果把这个判断放到真实工作里,最先需要补的约束是什么?我想知道从阅读到第一次实践之间,哪一步最值得先做。
还没有这篇文章的讨论。