← 返回目录
p.13方法⏱ 约 4 分钟

陷阱 #13:边界条件没处理

空列表、第一个、最后一个、0、最大值

🔎 最后验证 2026-05📚 来源:《AI编程实战三卷书》卷二 §8–12🧰 Claude Code✅ 78 人学过👁 135 次阅读
为什么学这个

程序员有句老话:"bug 都藏在边界上。"AI 写的代码在"中间情况"往往没问题,却常在边界翻车——空列表、只有一个元素、第一个/最后一个、数字为 0 或最大值。这些角落,正是 bug 最爱躲的地方。

💡 打个比方

就像盖楼:中间的楼层都好说,最顶层和最底层(封顶、地基)最容易出问题。代码的"边界"就是这些首尾和极端情况——平时用不到,一旦撞上就出事。

这个坑长什么样

// 取列表最后一项(❌ 没考虑空列表)
function last(arr) {
  return arr[arr.length - 1];   // 空数组时返回 undefined,后面一用就崩
}
// 常见边界:空集合、只有 1 个元素、循环的首/尾、除以 0、最大/最小值、刚好相等的临界点

亲手撞一下边界:下面这段先对正常列表调用 last(没问题),再对空列表调用——看它怎么崩(崩在最后那行 x.length)。真正稳妥的修法是在用结果之前先检查:把最后一行改成先判断 x 是不是 undefined,比如 if (x === undefined) console.log("列表是空的"); else console.log("长度:" + x.length),再运行看崩溃是否消失:

✍️ 动手写代码在浏览器里真实运行 · 安全沙箱
正常输入它好好的,空列表就出事。边界 bug 就是这样'平时不犯、撞上就崩'。

为什么会犯 & 怎么识别

  • 为什么:AI 按"典型情况"写,容易忽略这些不常出现的极端值
  • 识别信号:代码里直接用 arr[0]/arr[length-1]、做除法、写 > 还是 >= 时,没有对应的边界判断

怎么防

  • 列一张边界清单挨个想:空?1 个?首/尾?0?负数?最大值?正好相等?
  • 专门给边界写测试(m.8):每个边界一个测试用例
  • 提示里点名:"请处理空、单元素、首尾、为 0 等边界情况"
❓ 测验
'bug 都藏在边界上',下面哪个是典型的边界情况?
⚠️ 避坑'>' 还是 '>=' 这种一字之差,就是经典边界 bug

临界点上'取等不取等'(> vs >=< vs <=)、循环跑不跑到最后一个(差一错误 off-by-one),是边界 bug 的重灾区,而且不报错、只在临界输入时出错。审查时遇到比较和循环边界,多停一秒,代入临界值想一遍。

🤖 让 AI 覆盖边界(收藏)
请检查这段代码在以下边界情况下的表现,并补齐处理:空输入/空集合、只有一个元素、第一个和最后一个、数值为 0 或负数、最大/最小值、临界相等的情况。每个边界请说明它会怎样、你怎么处理的,最好配上测试用例。
🔎 来源与核验· 1 条,点开核对
本节每个关键论断都对应一个可追溯的来源 —— 这是本课程"靠谱、不过时"的底线。
「AI 代码常忽略空/单元素/首尾/0/临界等边界条件,需专门检查与测试」

🔧 试一试:专测边界(5 分钟)

让 AI 写个函数,专门用边界值测它:0、负数、空集合、最大值、刚好卡在阈值上。

你会看到:中间的正常值它都对,一到边界就露馅(越界、除零、差一)。

怎么防:主动列边界清单逐个测;让它把边界情况也考虑进去。

✅ 小结

逻辑与边界的坑你能防了。接下来两节回到"上下文"——AI 聊久了会自相矛盾。下一节先看它怎么因为忘事而前后打架。

下一节 → 陷阱 #14:上下文丢失导致前后矛盾
智图软件的赞赏码
都看到这了,打个赏呗!
接下来 · p.14
陷阱 #14:上下文丢失导致前后矛盾
继续读下一节 →