今日英语表达 8/30 · 场景:PR 描述。 所有例句均为本文特意创作,并非搬运自实际仓库,文件和函数名均为示例。
目录
一目了然
| 表达 | No functional change (intended). / NFC |
| 含义 | 功能没有变化(有意为之)。 |
| 适用场景 | 重构与清理 PR 的描述、提交信息的第一行 |
| 礼貌程度 | 不适用。这是一个陈述事实的标签 |
1. 含义与语感
这里的 functional 意为“功能的、行为的”。No functional change 意为“代码的形态变了,但程序所做的事情保持不变”。修改函数名、拆分文件、合并重复代码、整理注释与格式的 PR 都属于这种情况。
LLVM 的词汇表(Lexicon)将 NFC 解释为 No functional change 的缩写,并提到将其放在提交信息的第一行,以表明该提交纯粹是重构或清理。LLVM 的开发者政策也说明,仅更改格式或空格的提交应明确指出不改变功能,并通常写为 NFC。在其他项目中,虽然也有很多人能看懂这个缩写,但在初次接触的仓库中将其完整拼写出来会更稳妥。
这个表达向审阅者传递的信号非常明确:“无需寻找行为上的差异,只需看代码形态即可。”因此,即便面对长达数百行的重构,审阅压力也会减小。相反,如果写了 NFC 但实际功能却发生了变化,会极大损害信任。因此,当没有十足把握时,可以加上 intended(意图如此),写成 No functional change intended。意思是“我们是这么打算的,如果有什么不对的请指出来”。
2. 例句
场景 1:重构 PR 描述
Move the snapshot helpers from
controller.gointosnapshot.go. No functional change.
场景 2:区分功能变更与代码清理时
This PR has two commits. The first one is a pure refactor (no functional change). The second one changes the default timeout from 30s to 60s.
审阅者可以快速浏览第一个提交,并将注意力集中在第二个提交上。不把功能变更和清理混在同一个提交里是一个好习惯。
场景 3:回复审阅意见
Good question. The only difference is the variable name, so this should be a no-op. No functional change intended.
no-op 是 no operation 的缩写,是开发者用来表示“没有任何实际效果的变更”的表达。
3. 相似表达与区别
- No behavior change. 意思几乎相同。在强调用户视角下的行为时使用。
- Pure refactor / Cleanup only. 说明了“做了什么”。而 No functional change 说明的是“结果”。两者结合使用最为明确。
- No user-facing change. 意为内部行为可能已经改变,但对用户来说没有任何可见的变化。由于范围不同,切勿混用。Kubernetes 的 PR 模板中就有单独的一栏叫做 Does this PR introduce a user-facing change?
4. 韩国人常犯的错误
- There is no function change. function 会被当作名词“函数”来理解,从而可能被误解为“函数没有变”。
- 修改后的句子:No functional change.
- This PR doesn't change anything. 没有任何改动的 PR 是不需要的。必须准确说明究竟是什么保持不变。
- 修改后的句子:This PR doesn't change any behavior; it only renames the helpers.
- NFC 直接在初次见面的仓库中单独使用。有些审阅者可能并不知道这个缩写。
- 修改后的句子:Refactor only, no functional change.
5. 一行练习
请将以下韩语句子改写为 PR 描述。
已将测试辅助函数移至单独的包中。已确保功能不会发生变化。
参考答案
Move the test helpers into a separate package. No functional change intended.
PR 描述的第一句通常使用祈使语气(Move, Add, Fix)。由于“已确保不会发生变化”表达的是一种意图,因此加上了 intended。
Titi 的一言。 告诉审阅者哪些内容不需要看,也是一种体贴。
参考
- LLVM Lexicon, 「NFC」: https://llvm.org/docs/Lexicon.html
- LLVM Developer Policy(提交信息): https://llvm.org/docs/DeveloperPolicy.html
- Kubernetes PR 模板: https://github.com/kubernetes/kubernetes/blob/master/.github/PULL_REQUEST_TEMPLATE.md