JavaScript中的Clean Code:面向初学者的原则与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

JavaScript中的Clean Code:原则与示例(面向初学者)



整洁代码(Clean Code)不仅仅是一个时髦的概念,而是每位专业开发人员的基本技能。在JavaScript(尤其是Node.js环境)中,代码编写速度很快,但如果没有明确的原则来维护它,就会变成一场噩梦。本文面向那些希望编写不仅能够运行,而且美观、可读且可扩展代码的初学者。



整洁代码是指易于阅读、易于修改且易于测试的代码。它不会让人产生从头重写的冲动。让我们通过实际示例来解析基本原则。



1. 变量和函数的命名:实话实说



最简单也最困难的规则——名称必须反映本质。不要吝啬字符,要节省理解的时间。



糟糕(不清晰):

const d = new Date();const arr = ['apple', 'banana', 'grape'];const fn = (x) => x * 2;


良好(可读性强):

const currentDate = new Date();const fruitList = ['apple', 'banana', 'grape'];const doubleValue = (value) => value * 2;


命名规则:

  • 变量——名词(user, productList, errorMessage)。
  • 函数——动词(getUser, calculateTotal, validateEmail)。
  • 布尔值——以is、has、should开头(isActive, hasPermission, shouldUpdate)。
  • 避免魔法数字——将它们提取为常量。


// 糟糕const t = 3600000; // 这是什么数字?

// 良好const MILLISECONDS_IN_AN_HOUR = 3600000;const timeout = MILLISECONDS_IN_AN_HOUR;


2. 函数:一步一个动作



单一职责原则(Single Responsibility Principle)同样适用于函数。函数应该只做一件事,并且把它做好。



糟糕(一次性完成所有事情):

function processUserData(user) {    const fullName = `${user.firstName} ${user.lastName}`;    const email = user.email.toLowerCase();    const isValid = email.includes('@');        if (isValid) {        const result = { fullName, email };        saveToDatabase(result);        sendWelcomeEmail(email);        return result;    } else {        throw new Error('Invalid email');    }}


良好(拆分为小函数):

function buildFullName(firstName, lastName) {    return `${firstName} ${lastName}`;}

function normalizeEmail(email) { return email.toLowerCase().trim();}

function isValidEmail(email) { return email.includes('@');}

function processUserData(user) { const fullName = buildFullName(user.firstName, user.lastName); const email = normalizeEmail(user.email); if (!isValidEmail(email)) { throw new Error('Invalid email'); } const result = { fullName, email }; saveToDatabase(result); sendWelcomeEmail(email); return result;}


这样的代码易于测试、易于修改、易于理解。



3. 管理复杂度:避免深层嵌套



深层嵌套的if和for是可读性的敌人。使用提前返回(early return)和卫语句(Guard Clauses)。



糟糕(深层地狱):

function processOrder(order) {    if (order) {        if (order.isPaid) {            if (order.items.length > 0) {                // ... 50行代码            }        }    }}


良好(扁平结构):

function processOrder(order) {    if (!order) {        return;    }                  

博客

书籍推荐