为了账号安全,请及时绑定邮箱和手机立即绑定

编写易于维护的JavaScript代码的艺术:实用指南

解释:
这个标题简洁明了地传达了文章的核心内容,即如何通过一些实用的方法编写出清晰、易于维护的JavaScript代码。同时,它也符合中文的口语表达习惯,容易让读者产生共鸣。

干净代码的艺术:编写可维护JavaScript的指南

简介:

编写干净的代码不仅仅是审美选择的问题——它是减少错误、促进团队合作并确保软件项目长期维护的基本做法。本指南将探讨编写干净JavaScript代码的原则、实践和实用技巧。

核心原则如下

1. 先讲可读性

代码被阅读的次数远远多于被编写。优质的代码就像一个故事,包括你未来的自己在内,都容易读懂。

糟糕:

    const x = y + z / 3.14; // 计算 x 为 y 和 z 除以 3.14 的和

全屏模式, 退出全屏

好的:

    const r = d / Math.PI;

全屏模式,退出全屏

2. 维护性真的很重要啊

可维护的代码不仅具备模块性,还遵循SOLID原则,并且减少依赖。

真糟糕:

function calculateArea(radius) {
    // ...许多嵌套的逻辑和复杂的计算...
    // ...多重任务...
    // ...多重任务...
    return 结果;
}

全屏显示,退出全屏

// 计算给定半径的圆的面积
function calculateArea(radius) {
    return Math.PI * radius * radius;
}

切换到全屏模式,退出全屏

3. 可测性

干净的代码天生就容易测试。把复杂的操作拆分成更小、可测试的单元。

糟糕:

以下是一个名为getRandomNumber的函数,它返回一个0到1之间的随机数。

function getRandomNumber() {
    return Math.random();
}

点击全屏 点击退出全屏

好的:接下来呢?

函数 getRandomNumber(随机生成器 = Math.random) {
    return 随机生成器();
}

切换到全屏模式,切换出全屏模式

4. 扩展性

干净的代码会随着项目平滑地发展。

真糟糕:

    function handleUserData(data) {
        if (data.type === 'admin') {
            // 管理员逻辑的50行代码
        } else if (data.type === 'user') {
            // 用户逻辑的50行代码
        } else if (data.type === 'guest') {
            // 访客逻辑的50行代码
        }
    }

切换到全屏模式 退出全屏

好的,

    const userHandlers = {
        管理员: handleAdminData,
        用户: handle用户数据,
        访客: handleGuestData
    };

    function handle用户数据(data) {
        // 用户数据
        return userHandlers[data.type](https://dev.to/data);
    }

点击全屏/退出全屏

常见陷阱和解决方法:

小贴士:

1. 命名困境

名字应当反映意图和情境。

不好:例如:

    function calc(a, b) {
        // 这是一个简单的函数,用于计算两个数的乘积并加上税费
        return a * b + 税费;
    }

全屏 退出

好:

/**

* 计算含税价格的函数

* @param basePrice 基本价格

* @param taxRate 税率

* @returns 含税后的价格
 */
function calculatePriceWithTax(basePrice, taxRate) {
    const TAX_MULTIPLIER = 1;
    return basePrice * taxRate + TAX_MULTIPLIER;
}

全屏 退出全屏

2. 避免回调噩梦

用现代异步模式替换嵌套回调。

坏的例子:

    getUserData(userId, function(user) {
        getOrders(user.id, function(orders) {
            processOrders(orders, function(result) {
                // 更多层级...
            });
        });
    });

全屏模式 退出全屏

好的:

    async function processUserOrders(userId) {
        try {
            const user = await getUserData(userId);
            const orders = await getOrders(user.id);
            return await processOrders(orders);
        } catch (error) {
            handleError(error);
        }
    }

全屏模式 退出全屏

3. 配置管理

建立一个关于配置值的统一真相来源。

差:

// 分布在多个文件中的代码片段
以下是代码示例:
const API_KEY = 'abc123';
const API_ENDPOINT = 'https://api.example.com';
这些是示例中的常量定义。

全屏模式 (点击进入)/退出全屏模式

好:

    // 配置文件 config.js
    export const config = {
        api: {
            key: process.env.API_KEY, // API密钥
            endpoint: process.env.API_ENDPOINT  // API端点
        }
    };

进入全屏 退出全屏

实用的权衡与折衷:

性能表现与易读性

在保证可读性的同时考虑性能需求:

// 更易读,性能略低
定义 doubledNumbers 常量为 numbers 数组中的每个元素进行两倍计算的结果;

// 不太易读,性能更高(当性能至关重要时)
通过一个 for 循环,将 numbers 中的每个元素乘以 2;

全屏 退出

纯函数编程 vs. 副效应

虽然纯函数是理想的,但在实际应用中,副作用是必要的。要将它们隔离并仔细处理:

    // 纯函数 (无副作用)
    function calculateTotal(items) {
        return items.reduce((sum, item) => sum + item.price, 0);
    }

    // 必要且独立的副作用
    async function saveOrderToDatabase(order) {
        await database.orders.save(order);
        logOrderCreation(order); // 记录订单创建
    }

全屏显示,退出全屏

最佳实践:

1. 给变量和函数起有意义的名字

  • 变量名应反映其用途
  • 函数名应描述其执行的动作
  • 类名应代表其表示的实体

2. 尽量保持函数小巧

  • 每个函数应该只做一件事
  • 每个函数的行数应保持在20行以内
  • 将复杂的逻辑抽取到单独的函数中

3. 避免使用魔法数字

  • 使用命名常量来表示所有的数字
  • 将相关的常量分组到配置项中

4. 优雅地处理错误

  • 适当使用 try/catch 语句
  • 提供有意义的错误提示
  • 考虑错误恢复的方法

最后:

编写干净的代码是一场旅程,而不是一个终点。虽然完美的清洁可能无法达到,但通过持续的实践和务实的权衡来追求干净的代码,会使代码更易于维护、更可靠、更便于协作。记住,情境很重要——同样的代码在不同情况下可能会有所不同。关键是找到适合你具体情况的平衡点,同时保持一种让他人(包括未来的自己)会感激的代码。

🔗 点击这里请在我的LinkedIn上与我连接

让我们一起深入探索软件工程的世界吧!我经常分享关于JavaScript、TypeScript、Node.js、React、Next.js、数据结构和算法、Web开发等方面的见解。无论你是想提升技能还是探讨一些激动人心的话题,我都非常希望能与你连接并一起成长。

关注我:Nozibul Islam(领英)

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消