写程序这些年,最让我心虚的从来不是什么高深算法,而是那些藏在边界上的小缝。古人说差之毫厘谬以千里,代码里的这"毫厘",往往就是一个元素、一条记录、一阶索引的距离,偏就差那么一个。
循环里写 i<=n 还是 i<n,不过多一个等号的差别。可正是这一个小符号,让程序多伸了一次手,去够那个并不存在的元素,越界的报错像一记猝不及防的耳光。分页查询的 limit 与 offset,到了最后一页也常算得发晕,多吐一条或少漏一条,像数错了台阶,一脚踏空。最不留情的是拿长度减一当索引,一旦撞上空的数组,连回旋的余地都没有,干脆在你面前塌掉。
边界这种东西,总在以为万事妥帖时悄悄差开一个,不声不响,却比许多复杂的毛病都更难将就。