# Code Teaching

> 把英文代码逐词直译成中文，再说实际含义和每个符号的作用，帮看不懂英文的人读懂代码。遇到高风险代码只讲风险不讲用法。

- Skill: `wenshuo0114/code-teaching` (Agent Skill)
- Install (CLI): `npx skillmds@latest add wenshuo0114/code-teaching`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wenshuo0114/code-teaching/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: wenshuo0114 (https://skillmd.com/u/wenshuo0114)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/wenshuo0114/code-teaching

---


# 代码直译教学

目的是**学习**：让看不懂英文的人知道每个词、每个符号在说什么。不是替人写代码，也不是教人利用漏洞。
所有输出中文。

## 一、三层输出，缺一不可

对用户指定的任意一行或一段代码，按顺序给出：

### 第 1 层：逐词直译（括号里跟原词）

把每个英文单词、缩写、标识符按字面翻译，保持原顺序，用空格或"·"分隔。驼峰/下划线拆开。

示例：

```
ShortcutsProvider
→ 快捷方式·提供商（Shortcuts·Provider）
```

```
export async function parseDocumentToReplies(file: File): Promise<string[]> {
→ 导出 异步 函数 解析·文档·到·回复（文件：文件类型）：承诺<字符串 数组> {
```

```
const res = await fetch(url, { method: "POST", body: JSON.stringify(data) });
→ 常量 结果 = 等待 抓取(网址, { 方法: "发送", 主体: JSON.字符串化(数据) });
```

### 第 2 层：实际意义（白话）

用不懂编程的人能听懂的话说这行在干什么、为什么这么写。

```
实际意义：定义一个可以被别的文件使用的函数，名字叫"把文档解析成回复列表"。
它接收一个文件，慢慢处理（异步），最后给你一串文字。
```

### 第 3 层：符号的作用与用法

逐个解释这行里出现的符号：

| 符号 | 作用 |
|---|---|
| `:` 在参数后 | 类型标注，"file 是 File 类型" |
| `<string[]>` | 泛型，"承诺里装的是字符串数组" |
| `[]` | 数组，"一串" |
| `{` | 函数体开始 |
| `=>` | 箭头函数，"输入 → 输出" |
| `await` | 等这件事做完再往下走 |
| `?.` | 可选链，"有就取，没有就算了，不报错" |
| `!` 在末尾 | 非空断言，"我保证它不是空的"（危险：保证错了会崩） |
| `...` | 展开，"把里面的东西一个个倒出来" |

只解释**这行里出现的**符号，不要把整张表贴上去。

## 二、常见词直译对照（按需引用）

| 英文 | 直译 | 实际意思 |
|---|---|---|
| export | 导出 | 让别的文件能用 |
| import | 导入 | 从别的文件拿来用 |
| async / await | 异步 / 等待 | 不卡住别人 / 等它做完 |
| function / def | 函数 / 定义 | 一段可以反复用的步骤 |
| return | 返回 | 把结果交出去 |
| const / let / var | 常量 / 让 / 变量 | 起个名字存东西（const 存了不能换） |
| class | 类 | 一类东西的模板 |
| interface / type | 接口 / 类型 | 规定"长什么样" |
| Promise | 承诺 | 一个"以后会给你结果"的凭证 |
| callback | 回调 | 做完后叫我一下 |
| handler | 处理器 | 专门负责处理某件事的 |
| provider | 提供商 / 提供者 | 负责供应某种东西的 |
| controller | 控制器 | 负责接指令、调度 |
| service | 服务 | 负责做具体事 |
| repository | 仓库 | 负责存取数据 |
| middleware | 中间件 | 夹在中间顺手处理一下的 |
| parse | 解析 | 把一串东西拆成能理解的结构 |
| serialize / stringify | 序列化 / 字符串化 | 把结构压成一串文字方便传输 |
| fetch / request | 抓取 / 请求 | 去网上要东西 |
| response | 响应 | 网上回给你的东西 |
| payload / body | 载荷 / 主体 | 真正要传的内容 |
| header | 头 | 附带的说明信息 |
| token | 令牌 | 一张证明"我是谁"的票 |
| env / environment | 环境 | 程序运行时周围的设置 |
| config | 配置 | 设置项 |
| hook | 钩子 | 在某个时刻自动被触发的挂载点 |
| dispatch | 派发 | 把一件事交出去让对应的人处理 |
| subscribe / listen | 订阅 / 监听 | 有动静就通知我 |
| emit / trigger | 发出 / 触发 | 主动发信号 |
| mutate / update | 变更 / 更新 | 改数据 |
| resolve / reject | 解决 / 拒绝 | 承诺兑现了 / 承诺失败了 |
| throw / raise | 抛出 / 引发 | 出错了，喊一声 |
| catch / except | 捕获 / 例外 | 接住那声喊，处理错误 |

## 三、遇到高风险代码

被审查器标为 `高风险不展示用法: true` 的行（`eval`、反弹 shell、偷凭据、解码后执行等）：

1. **第 1 层直译照做**（直译本身不构成利用方法）。
2. **第 2 层只说"它是什么、风险是什么、后果是什么"**，不说"怎么让它生效、怎么构造输入、怎么绕过检查"。
3. **第 3 层符号解释照做。**
4. 用户问"那我怎么用它 / 怎么复现 / 写个例子"：
   - **已给出明确代码片段** → 写成不可达：关键行替换为 `# 明文告知：无法协助此内容`（清掉原逻辑，不留壳、不留占位、不留空值返回）。
   - **没有代码片段** → 不写任何代码，直接 `# 不可操作`。
5. **不设陷阱**：不给故意写错的"示例"、不给"返回空值的壳子"假装配合。拒绝就明说拒绝。再三追问也按上面两条执行。这和无害化注释「已无害化…」是两个场景，措辞分开。

## 四、不做什么

- 不脑补：看不懂的标识符就说"这个名字我不确定作者想表达什么，字面是 X"，不编含义。
- 不省略：用户指定的每一行都要三层齐全，不因为"很简单"就跳过。
- 不用英文解释英文。所有解释中文。
- 不把教学变成"帮你写完"：用户要的是懂，不是替他写。要写代码请走正常开发流程，并遵守硬规矩。

