如果你在一个乱七八糟的房间里,你找不到你的钥匙。衣服到处都是,书本堆得到处都是。
点击观看乱糟糟的房间.gif
这说的是一团糟的代码。现在情况是一样的灾难,你的大脑正在一点一点地耗尽你的精力。
而干净的代码就像走进一个整洁的房间。每样东西都各得其所。没有压力,没有困惑,只有清晰。
事实是:如果你想在软件开发界生存下去,编写整洁的代码绝对不是可有可无的。人工智能已经能写出比你更整洁的代码。
你可以写出混乱的代码,然后努力修复每一个bug,最终在求职面试中被拒绝,也无法建立一个可管理的创业公司;或者你可以掌握干净的代码,在你触碰的每一个项目中大放异彩。
沉默了一会
整洁的程序员 vs. 雀塘的程序员(Note: There seems to be a typo in the expert suggestion for "邋遢的程序员". The correct term should be "邋遢的程序员" instead of "雀塘的程序员".)
Corrected translation:
整洁的程序员 vs. 雕邋遢的程序员Final Corrected Translation:
整洁的程序员 vs. 雀遢的程序员Final Corrected Translation with proper term:
整洁的程序员 vs. 雀遢的程序员Final Corrected Translation with corrected term:
整洁的程序员 vs. 雀遢的程序员Final Corrected Translation with correct term:
整洁的程序员 vs. 雀遢的程序员Final Corrected Translation with correct term and correction:
整洁的程序员 vs. 雀遢的程序员Final Corrected Translation:
整洁的程序员 vs. 雀遢的程序员Final Corrected Translation with correct term:
.Final Corrected Translation:
整洁的程序员 vs. 雀遢的程序员让我给你描述一幅画面。
这里有张图表显示了两种类型程序员的历程
- ⚠️ 劣质码农(红线): 起步快但很快就挂了。代码写得越多,问题也越多。
- ⚡ 优雅代码(蓝线): 起步慢但稳如狗。增长不仅不停,反而越来越快。
现在,你决定想跟哪条路线。
糟糕代码成本这张图表展示了,在初期开发阶段,糟糕的代码稍微比干净的代码更难修改。
然而,当我们进入维护与重构阶段时,差距显著扩大,质量差的代码几乎要花费比干净代码多一倍的成本。
到了遗产阶段,糟糕的代码达到了100%的成本支出,现在更新它变得极其昂贵,而干净的代码仍然保持在45%的成本支出,更易于管理。
毫无疑问,糟糕的代码质量在软件开发中是个很费钱的问题。
此处省略文字
编写整洁代码的十条黄金准则1., 使用有意义的名字
将你的变量或函数命名为 b 或 x 简直就是胡闹。把它们取个有意义的名字,这能让代码更易读和维护。
// 模糊不清且弱
let b = 5;
// 明确且强健
let numberOfUsers = 5;
// 这是一个模棱两可的声明
// This is an ambiguous declaration
// 这是一个明确且强健的声明
// This is a clear and strong declaration
全屏,退出全屏
那些字迹潦草的人不想承担因自己笔误造成的后果。你可别学他们。
……
2. 功能单一化(SRP)
一个函数应该只做一件事——并且要做好这件事。这叫做单一职责原则(SRP),也常被简称为SRP。
好的代码就像锤子,一次只钉一颗钉子,而不是十个。
// 干净:一次只做一件事
function calculateTotal(a, b) {
return a + b;
}
function logTotal(user, total) {
console.log(`用户: ${user}, 总计: ${total}`);
}
// 脏:试图一次搞定所有事
function calculateAndLogTotal(a, b, user) {
let total = a + b;
console.log(`用户: ${user}, 总计: ${total}`);
}
进入全屏,退出全屏
当你混杂任务时,你就是在把混乱和灾难搅混在一起。
此处省略了部分内容
3. 无声评论
你不用每次有人走进房间时都解释门是用来做什么的。你的代码也应该这么简单明了。
// 清晰:简单明了
let userAge = 25;
// 模糊:不太清楚
let a; // 注:这代表“用户年龄”
点击全屏 退出全屏
评论其实不坏,但如果你的代码不够强大或清晰,你就已经输了。
...
4. 让代码易于阅读
如果你写的代码,别人觉得像在解谜,你就是个爱添乱的人了。
// 清晰:读起来像一个故事
if (isLoggedIn) {
console.log("欢迎!");
} else {
console.log("请登录。");
}
// 混乱:感觉像混乱
if (isLoggedIn) {
console.log("欢迎回来!");
} else {
console.log("请登录。");
}
全屏 退出全屏
可读的代码不仅是为了别人,更是为了六个月后的你自己。
此处省略
5. 测试你写的所有东西
如果你懒得不去写测试,别在你的代码出了问题时再说什么了。
class Calculator {
add(a, b) { return a + b; }
subtract(a, b) { return a - b; }
}
// 单元测试
const calculator = new Calculator();
console.assert(calculator.add(2, 3) === 5, "加法运算失败");
console.assert(calculator.subtract(5, 3) === 2, "减法运算失败");
全屏切换
测试就像是你的保险单。忽视它们,就是在拿你的时间冒险。
……
6. 当心依赖关系
依赖就像交易。选对了,你就赢了。选错了,就会被卡在一个后悔的选择里。
// 依赖于 Nodemailer 发送邮件
const nodemailer = require('nodemailer');
function 发送邮件(to, subject, message) {
const transporter = nodemailer.createTransport({ /* 设置 */ });
return transporter.sendMail({ from: "you@example.com", to, subject, text: message });
}
点击这里切换到全屏模式 点击这里退出全屏模式
避免硬编码依赖项。使用抽象,或配置文件(包括环境变量或设置文件)以便安全维护。
这只是众多例子中的一个。作为一名开发者,你可能要使用成百上千个库或依赖项。
我没有说你不应该依赖它们,现在避免不了它们。但在你安装它们时,你得特别留心。
这是因为有时候它们包含可能会毁掉你项目的风险。你应该检查组织软件系统的安全性、性能、质量和功能。
永远控制你的工具们,不要让它们反过来控制你。
此处省略内容
7. 像大佬一样组织项目.
一个组织良好的项目是车库甩卖会和高端精品店之间的区别。
如果你的代码仓库看起来像一个杂乱的抽屉,你已经失去了对自己未来的尊重和认可。
一个邮件应用的简洁项目结构:
比如说,你正在做一个给用户发邮件的应用。项目结构应该是这样的:
图片由shahan提供
8. 保持格式的一致性
不要像有十种性格的程序员那样写代码,保持代码格式一致。
使用像Prettier或ESLint这样的工具来强制保持风格的一致性。如果你每个文件看起来都不一样,你制造的混乱是没有人愿意去解决的。
我觉得格式一致是整洁编码最重要的方面之一。
瞅瞅……
在代码库中使用 2或4个空格 来进行 缩进,并在整个代码库中保持一致的缩进。避免使用制表符,以确保不同编辑器之间的一致性。
请将每行字符数控制在 100-120个字符,以防止横向滚动从而提高可读性。
将相关逻辑放在一起,并用空行分开代码块,以突出它们的目的。
最后,不要过度对齐代码;让代码的缩进自然地引导逻辑结构更顺畅。
9. 停止硬编码数值
硬编码其实是懒惰假装很努力的样子。
// 差:硬编码且不够灵活
function createUser() {
const MAX_USERS = 100;
if (currentUsers >= MAX_USERS) throw "用户已达上限!";
}
// 好:动态且更灵活
const MAX_USERS = 100;
function createUser() {
if (currentUsers >= MAX_USERS) throw "用户已达上限!";
}
切换到全屏 退出全屏
尽量避免硬编码,因为它是一条捷径,会带你走向悬崖。
10. 让函数保持简短
如果你的函数超过20行代码,它可能承担了太多任务,你可以将其拆分。
/**
* 更新购物车函数,接受购物车对象和商品对象作为参数。
* 首先,将商品添加到购物车,然后计算购物车的总金额,并记录此次交易。
* 返回总金额。
*/
function updateCart(cart, item) {
addItemToCart(cart, item);
let total = calculateTotal(cart);
logTransaction(item, total);
return total;
}
/**
* 向购物车添加商品的函数,接受购物车对象和商品对象作为参数。
* 将商品添加到购物车的项目列表中。
*/
function addItemToCart(cart, item) {
cart.items.push(item);
}
切换到全屏 退出全屏
简短的函数是简洁明了的函数。它们每次都能精准到位。
🎄🎁圣诞礼物!
在我书《代码整洁之道零到一》里,你刚刚读到的内容只是冰山一角。
《整洁代码从零到一》书封
这10条规则啊,只是表面。
而且因为是圣诞节,所以我来帮你一把。输入促销码 MERRYCHRISTMAS 享受半价优惠。
但不要等太久哦——这个优惠会在2024年12月31日到期。
或者继续和你那混乱的代码斗争。选择权在你手上。
共同学习,写下你的评论
评论加载中...
作者其他优质文章