
文章目录一、为什么看懂代码不能只靠逐行翻译二、第一步先告诉 AI 你的基础和目标三、模板一解释一段简单代码五、第三步让 AI 解释输入、输出和副作用什么是副作用六、模板二用学习模式解释代码第一步解释目录结构八、模板三梳理陌生项目的调用链九、如何避免 AI 把猜测说成事实解释结果的三层结构十、代码解释后继续向 AI 提问追问一为什么这样写追问二能不能用简单写法表示追问三哪里最容易出错追问四修改前要注意什么十一、常见误区误区一一次粘贴太多代码误区二只要求逐行解释误区三把 AI 的解释当作代码事实误区四解释完不自己运行十二、一份可直接复用的代码阅读模板✍创作者全栈弄潮儿 个人主页全栈弄潮儿的个人主页️ 个人社区欢迎你的加入全栈开发社区 专栏地址欢迎订阅AI 编程提效实战阅读代码很多时候比写代码更困难。尤其是下面这些场景教程中的示例使用了没见过的语法。接手一个项目不知道文件之间如何关联。看到一个函数却不知道它为什么这样写。代码可以运行但不理解输入和输出。只修改了一个小地方却担心影响其他功能。这时很多人会把代码复制给 AI然后问这段代码是什么意思AI 可能会回答但结果不一定适合你的学习目标。有时解释太简单有时充满专业术语有时只是把代码换一种方式重复一遍。今天我们学习一种更有效的方式让 AI 按照你的基础、代码结构和阅读目标分层解释一段代码。这套方法既适合学习也适合接手陌生项目。一、为什么看懂代码不能只靠逐行翻译假设你看到下面这段代码constactiveUsersusers.filter((user)user.enabled).sort((a,b)a.name.localeCompare(b.name));如果只做逐行翻译可能得到users调用了filter。filter里面有一个函数。之后调用了sort。localeCompare用来比较字符串。这些解释没有错但还没有回答更重要的问题这段代码整体想解决什么问题activeUsers最后得到的是什么原数组users会不会被修改如果users是空数组会怎样如果某个用户没有name字段会怎样所以真正有效的代码解释至少应该包含 4 个层次整体目的 ↓ 执行流程 ↓ 关键语法 ↓ 输入、输出和边界情况只看每一行的意思不一定能理解整段代码的作用。二、第一步先告诉 AI 你的基础和目标同一段代码对不同的人应该有不同的解释方式。如果你刚开始学习 JavaScript可以这样告诉 AI我刚开始学习 JavaScript目前只了解变量、函数、数组和 if 判断。 请不要默认我知道高级语法。如果你已经有开发经验只是刚接触一个新框架可以这样说我熟悉 JavaScript 和基本前端开发但刚开始学习 Vue 3。 请重点解释 Vue 相关的写法以及它和普通 JavaScript 的区别。如果你正在接手一个项目可以这样说我正在接手一个陌生的 Vue 3 项目。 我想先理解这个文件在整个功能中的作用 请重点说明它和其他模块的关系不需要解释基础语法。因此提问前先说明两件事我的基础是什么 我想通过这段代码了解什么三、模板一解释一段简单代码这是最适合初学者使用的模板。我正在学习 [编程语言或框架]。 目前的基础是[说明你已经学会的内容]。 下面是一段代码 [语言] [粘贴代码]请按以下顺序解释先用一句话说明这段代码整体要解决什么问题。按执行顺序说明代码做了哪些事情。解释关键变量、函数和判断条件。说明输入是什么输出是什么。用一组简单数据演示执行过程。列出空值、错误输入和边界情况下可能发生什么。如果使用了我还不了解的语法请先解释语法再回到整体逻辑。请使用初学者容易理解的语言不要只把代码逐字翻译一遍。### 示例 代码如下 javascript function getCompletedTitles(todos) { return todos .filter((todo) todo.completed) .map((todo) todo.title); }可以这样提问我正在学习 JavaScript目前了解变量、函数和数组 但还不熟悉 filter 和 map。 下面是一段代码 javascript function getCompletedTitles(todos) { return todos .filter((todo) todo.completed) .map((todo) todo.title); }请按以下顺序解释这段代码整体要解决什么问题todos 需要是什么格式filter 和 map 分别做什么代码执行了几步给出 3 条待办数据并演示最终结果。如果 todos 是空数组会怎样如果某条数据没有 title会怎样这样得到的回答会比“解释这段代码”更具体。 ## 四、第二步让 AI 用示例演示执行过程 很多代码之所以难懂是因为我们不知道数据是怎样流动的。 例如 javascript const numbers [1, 2, 3, 4, 5]; const result numbers .filter((number) number % 2 0) .map((number) number * 10);可以要求 AI 按中间结果解释请不要直接告诉我最终结果。 请按照每一步的中间结果解释 1. numbers 的初始值是什么。 2. filter 执行后得到什么。 3. map 执行后得到什么。 4. result 最终是什么。你会得到类似这样的过程初始数组[1, 2, 3, 4, 5] filter 后[2, 4] map 后[20, 40] 最终 result[20, 40]对于数组处理、条件判断、循环和数据转换这种“展示中间结果”的方式非常有效。五、第三步让 AI 解释输入、输出和副作用看懂一段代码时不能只关注它返回了什么。还要确认它是否修改了传入的对象。修改了数组内容。写入了文件。发送了网络请求。修改了页面。更新了数据库。保存了登录状态。可以这样要求 AI请额外说明 1. 这段代码的输入是什么 2. 返回值是什么 3. 是否会修改输入数据 4. 是否会产生网络、文件、页面或数据库副作用 5. 调用它之前需要满足什么条件 6. 调用它之后哪些状态可能发生变化什么是副作用简单来说副作用就是除了计算并返回结果之外代码对外部环境产生的影响。例如functionaddTodo(todos,title){todos.push({title,completed:false});returntodos;}这段代码返回了数组但它同时也修改了原来的todos。如果你不知道这一点可能会在其他地方遇到难以理解的问题。可以继续问 AI这段函数是否修改了传入的 todos 请说明修改前后的数组变化。 如果不希望修改原数组请给出一个适合初学者的改写方式。六、模板二用学习模式解释代码如果你的目标是学习而不是马上修改代码可以使用更完整的模板我想通过下面这段代码学习 [知识点]。 我的基础 [说明已经学过什么] 代码 [语言] [粘贴代码]请按照“学习模式”回答这段代码最终完成了什么功能其中涉及哪些知识点按由浅到深的顺序解释这些知识点。给出一个最小版本让我先理解核心逻辑。再说明原代码为什么写得更复杂。给出 2 个我可以自己修改的练习。列出初学者最容易误解的地方。如果代码中存在不好的写法请单独说明不要为了讲解而把它当作最佳实践。这个模板适合 - 看教程代码。 - 学习开源项目中的某个功能。 - 理解一个新语法。 - 对比简单写法和项目写法。 ## 七、接手项目时不要一上来解释整个仓库 陌生项目通常包含很多文件。 如果你把整个项目一次交给 AI然后要求 text 请解释这个项目。得到的结果可能很长但不一定有用。更好的方式是从小到大项目目录 ↓ 入口文件 ↓ 目标页面或接口 ↓ 核心函数 ↓ 调用链和数据流第一步解释目录结构可以先提供目录结构这是一个前端项目的目录结构 text src/ api/ components/ pages/ router/ store/ utils/ App.vue main.js请从初学者角度说明每个目录可能负责什么。哪些目录通常和页面展示有关。哪些目录通常和接口请求有关。如果我要查找“用户列表页面”建议从哪里开始。如果只是根据目录无法确定请明确标记为推测。### 第二步解释入口文件 找到入口文件后再让 AI 解释 text 下面是项目入口文件 javascript [粘贴 main.js 或 App.vue]请说明项目从哪里开始执行。创建了哪些应用对象。注册了哪些插件或路由。页面是如何被加载出来的。我接下来应该查看哪些文件。### 第三步解释一个具体功能 不要问“整个项目怎么工作”而要限定一个目标 text 我现在只想理解“用户列表”这个功能。 请根据下面的文件梳理它的调用关系 1. 页面组件 2. 接口文件 3. 数据请求方法 4. 列表渲染位置 5. 加载状态和错误处理 请先输出调用链再逐个解释每个文件的作用。八、模板三梳理陌生项目的调用链这个模板适合接手项目时使用我正在接手一个陌生的 [技术栈] 项目。 当前想理解的功能是 [例如用户登录 / 商品列表 / 订单提交] 相关文件如下 文件 1[文件路径] [语言] [代码]文件 2[文件路径][代码]文件 3[文件路径][代码]请按以下结构回答先画出从用户操作到最终结果的调用链。说明每个文件的职责。说明数据从哪里来经过哪些处理。说明哪些地方会修改状态或发送请求。说明可能的错误处理路径。列出我还需要查看的文件。如果只能根据代码推测请把推测单独列出。### 一个简单的调用链示例 假设用户点击“创建待办事项”代码可能经过 text TodoForm.vue ↓ todoApi.create() ↓ POST /api/todos ↓ TodoController ↓ TodoService ↓ TodoRepository ↓ 数据库你可以让 AI 分别回答哪个文件负责接收用户输入哪个函数负责发送请求哪一层负责业务规则哪一层负责访问数据库请求失败后错误最终显示在哪里这种方式比只看一个文件更接近真实项目的工作方式。九、如何避免 AI 把猜测说成事实解释陌生代码时AI 可能根据常见项目模式进行推测。例如它说这个文件应该是用户登录后的首页。“应该是”说明它并没有从代码中完全确认。因此建议在 Prompt 中加入请把回答分成三类 1. 可以从代码直接确认的事实。 2. 根据命名或常见结构推测的内容。 3. 仍然需要查看其他文件才能确认的问题。这会让解释结果更加可靠。解释结果的三层结构已确认 代码调用了 getUser 方法并把结果保存到 user 变量。 推测 getUser 可能负责请求用户信息但需要查看方法定义才能确认。 待确认 用户信息是否来自缓存、接口或本地存储。对于陌生项目这种区分非常重要。十、代码解释后继续向 AI 提问第一次回答通常只是开始。看完后可以继续追问追问一为什么这样写这段代码为什么要先执行 A再执行 B 如果交换执行顺序会发生什么追问二能不能用简单写法表示请给出一个功能相同但更适合初学者理解的版本。 并说明两个版本的区别。追问三哪里最容易出错请列出这段代码最容易出错的 5 个地方 并给出对应的测试方法。追问四修改前要注意什么如果我要修改这段代码 有哪些调用方、数据结构或副作用需要先确认好的代码解释最终应该帮助你完成下一步行动能够修改。能够测试。能够排错。能够判断影响范围。十一、常见误区误区一一次粘贴太多代码代码太多时AI 可能抓不住重点解释结果也会变得宽泛。更好的方式是先提供目录和目标 ↓ 再提供入口文件 ↓ 再提供关键函数 ↓ 最后补充依赖文件误区二只要求逐行解释逐行解释适合学习语法但不一定能帮助你理解功能。最好同时要求整体作用。执行流程。输入输出。调用关系。异常和副作用。误区三把 AI 的解释当作代码事实如果 AI 没有看到某个函数的定义它就不能准确说明这个函数内部做了什么。遇到这种情况应该继续提供相关代码而不是直接相信猜测。误区四解释完不自己运行看懂解释和真正理解之间还有运行、修改和观察结果这一步。至少尝试修改一个输入。删除一条数据。增加一个边界情况。观察控制台或页面变化。十二、一份可直接复用的代码阅读模板我正在学习或接手一个 [语言 / 框架] 项目。 我的目标是 [想理解的具体功能] 我的基础 [已经掌握的内容] 下面是相关代码 [语言] [粘贴代码]请按以下结构解释这段代码整体要解决什么问题它从哪里开始执行按执行顺序说明主要步骤。说明输入、输出和关键数据变化。解释重要变量、函数和语法。说明是否存在副作用。列出正常、边界和异常情况。区分代码中可以确认的事实、合理推测和待确认问题。如果我需要修改它应该先检查哪些调用方和相关文件请使用 [初学者 / 有经验开发者] 能理解的语言。不要只逐行翻译也不要把无法从代码确认的内容说成事实。## 十三、总结 让 AI 解释代码时不要只问 text 这段代码是什么意思更好的提问方式是同时说明你的基础你已经了解什么。你的目标想学习语法、理解功能还是接手项目。代码上下文文件位置、调用方和相关模块。输出要求整体作用、执行流程、数据变化和边界情况。代码阅读可以按照下面的顺序进行先看整体目的 ↓ 再看执行流程 ↓ 理解输入和输出 ↓ 确认调用关系 ↓ 检查异常和副作用 ↓ 自己运行并修改请记住AI 可以帮你加快阅读代码的速度但真正的理解来自你对代码的运行、修改和验证。下一篇文章我们继续进行一个小型实战用 AI 写一个小功能从需求到代码的完整过程。✍坚持原创求关注点赞收藏