我读过两种代码:一种像合同条款,密集、规范、毫无温度;另一种像散文,节奏分明、意图清晰,让人看完会心一笑。
代码是写给人看的,机器只是顺便执行
这句话出自 Donald Knuth。当一段代码被写下,它将在未来无数次被打开、被阅读、被修改——而写它的那一刻,常常是它一生中被理解得最清楚的瞬间。
之后呢?三个月后的你、半年后的同事、两年后的新人,他们没有你写代码时的上下文。所以代码必须自己讲清楚自己是谁、为什么存在、能做什么。
命名:先把名字想好,再开始写
// 不好
function check(d) {
if (d.s === 1 && d.t < Date.now()) return false;
return true;
}
// 好
function isOrderStillValid(order) {
const isCanceled = order.status === ORDER_STATUS.CANCELED;
const isExpired = order.expireAt < Date.now();
return !isCanceled && !isExpired;
}
后者多了几行,却节省了未来无数次的”这是什么意思”。
三个习惯
一、变量名讲清意图
d 不知道是什么,data 太宽泛,order 才有所指。多写两个字符,少写一段注释。
二、函数只做一件事
如果一个函数的名字里出现了 “and”——比如 loadAndValidate——它应该被拆成两个。
三、删除比新增更难,但更值得
每一行代码都是一笔债。真正成熟的工程师,删掉的代码比写下的多。
YAGNI 与 KISS
这是两个让我反复回到原点的缩写:
- YAGNI: You Aren’t Gonna Need It. 不要为想象中的未来需求加抽象。
- KISS: Keep It Simple, Stupid. 简单是终极的成熟。
它们看似简单,实践起来却很难。因为我们总忍不住”多做一点”——多一层抽象、多一个参数、多一个 hook。但每多一点,就多一笔被未来的人付的债。
写在最后
所谓优雅,从来不是华丽。
是该有的都有,多余的都没有。
是读者读到的时候,心里轻轻”哦”了一声——
然后继续做手头的事,没有被打断。
写代码这么多年,我越来越相信:编程是一种克制的艺术。