slot deposit pulsa slot mahjong slot gacor slot gacor slot gacor resmi slot gacor 2025 slot gacor terpercaya slot gacor 2025 slot gacor hari ini slot gacor hari ini slot gacor hari ini
编写整洁代码的最佳实践原则
17611538698
webmaster@21cto.com

编写整洁代码的最佳实践原则

编程语言 0 1197 2023-09-18 02:50:13

图片

21CTO导读:如何编写整洁的代码?本文将从实践经验与执行原则方面描述,相信看过你会变得很清晰。


概述

编写整洁的代码是每个软件开发人员的基本能力。干净的代码不仅使你的代码库更易于维护和理解,而且还能够促进团队成员之间的协作,升华友谊。

在这篇文章中,我们将探讨什么是整洁的代码、为什么它很重要,并为你提供一组最佳实践和原则来帮助你编写整洁并可维护的代码。

什么是整洁代码?


整洁的代码是易于阅读、易于理解和易于修改的代码。它是没有不必要的复杂性、冗余和混乱的代码。整洁的代码遵循一组约定和最佳实践,使其更加一致,使多个开发人员更容易无缝地处理同一个项目。


为什么整洁的代码很重要?


  1. 可读性:简洁的代码易于阅读。任何一个同事,包括后面的你自己都可以快速理解它。这将减少掌握代码功能所需的时间,从而加快开发和调试速度。

  2. 可维护性:代码的阅读次数要多于编写次数。当你编写整洁的代码,随着时间的推移,维护和扩展应用程序将变得更容易。项目经常发展和迭代,这在软件开发中至关重要。

  3. 协作:简洁的代码更有利于协作。当你的代码干净且组织良好,其他团队成员就可以有效地处理它。这使得划分任务和同时处理代码库的部分变得更加容易。

  4. 减少错误:整洁的代码可以减少引入错误的可能性。难以理解的代码在修改或增强过程中更容易出错。

  5. 效率:整洁的代码就是高效的代码。因为它避免了不必要的操作和复杂性,通常运行速度更快,并且占用的资源更少。


我们了解了为什么的整洁代码很重要,接下来深入研究一些最佳实践和原则,来帮助你编写整洁干净的代码。

编写整洁代码的最佳实践和原则


1. 有意义的变量与函数名称

对变量、函数、类和其它标识符使用可描述性名称。精心选择的名称可以传达实体的目的,使代码更容易理解。避免使用单字母变量名或『神秘』的缩写,甚至于使用汉字。

# 不好的变量名x = 5变量 = 5
# 好的变量名total_score = 5


2. 函数和方法要简洁

函数和方法应该简洁,并且要专注于单一任务。单一职责原则(SRP)指出,一个函数应该只做一件事,并且把它做完。较短的函数更加容易理解、测试和维护。若函数变得太长或太复杂,请你考虑将其分解为更小、更易于管理的函数。

// 长或复杂的函数function processUserData(user) {    // 多行代码...}
// 简洁的函数function validateUserInput(userInput) { // 验证逻辑...}
function saveUserToDatabase(user) { // 数据库操作...}


3. 注释和文档

请谨慎使用注释——当我们添加注释时,要让它们变得有意义。代码应该尽可能不言自明,这样无需注释。文档(例如内联注释和自述文件)可帮助其它开发人员了解代码的目的和用法。记录复杂的算法、重要的决策和通用 API。

# 不好的注释x = x + 1  # Increment x
# 好的注释# 将字符串转换为数字,当不是数字类型时,API 返回错误的字符串类型totalUsers = Number(users);


4.一致的格式和缩进


坚持一致的编码风格和缩进,这使得代码库看起来干净,且组织清晰。大多数编程语言都有社区规定的编码标准(例如,Python 的 PEP 8、JavaScript 的 eslint)。

开发人员应该遵循这些标准。一致性还适用于命名约定、间距与代码结构等。

// 格式不一致if(condition){    doSomething();  } else   {      doSomethingElse();}
// 格式一致if (condition) { doSomething();} else { doSomethingElse();}


5. DRY(不要重复自己)之原则

请避免重复代码。重复的代码非常难于维护,并增加逻辑不一致的风险。我们要将通用的功能提取到函数、方法或类中以提高代码的可重用性。当需要进行修改时,只需在一处进行就可以完成了。

假设,正在开发一个 JS 应用程序来计算购物车中商品总价。最开始,有两个单独的函数来计算每种商品类型的价格:一个用于计算一本书的价格,另一个用于计算笔记本电脑的价格。

这是最开始的源代码:

function calculateBookPrice(quantity, price) {    return quantity * price;}
function calculateLaptopPrice(quantity, price) { return quantity * price;}


虽然这些函数可以执行,但它们违反了 DRY 原则,因为计算总价逻辑对于不同的商品类型是重复的。如果你有更多的项目类型需要计算,你将不断重复此逻辑。

为了遵循DRY原则,提高代码的可维护性,我们对代码进行如下重构:

function calculateItemPrice(quantity, price) {    return quantity * price;}
const bookQuantity = 3;const bookPrice = 25;
const laptopQuantity = 2;const laptopPrice = 800;
const bookTotalPrice = calculateItemPrice(bookQuantity, bookPrice);const laptopTotalPrice = calculateItemPrice(laptopQuantity, laptopPrice);


在上面经过重构的代码中,我们有了一个calculateItemPrice函数,它根据参数提供的数量和价格计算商品的总价。这样便遵循了 DRY 原则,计算逻辑不再重复。

接下来,我们可以通过使用适当的数量和价格值调用calculateItemPrice来轻松计算书籍、笔记本电脑或任何其它商品类型的总价。这种方法提高了代码的可重用性、可读性和可维护性,同时降低了重复代码引起的错误风险。

6. 使用有意义的空格

使用空格和换行符正确设置代码格式,以增强程序的可读性。比如使用空格来分隔代码的逻辑部分。格式良好的代码更容易浏览,减少阅读者的认知负担。

// 没有使用空格const sum=function(a,b){return a+b;}
// 使用空格提供可读性const sum = function (a, b) { return a + b;}


7. 错误处理

请你优雅地处理错误。我们在代码中要使用适当的 try-catch 块或错误处理机制,这可以防止意外崩溃并为调试提供有价值的信息。不要抑制错误或在没有正确响应的情况下简单地记录错误。

// 简单显示错误信息try {    result = divide(x, y);} catch (error) {    console.error("An error occurred");}
// 详细的返回错误类型try { result = divide(x, y);} catch (error) { if (error instanceof ZeroDivisionError) { console.error("Division by zero error:", error.message); } else if (error instanceof ValueError) { console.error("Invalid input:", error.message); } else { console.error("An unexpected error occurred:", error.message); }}


8. 测试

要编写单元测试来验证代码的正确性。测试驱动开发 (TDD) 可以使开发人者预先考虑特殊情况和预期行为,从而帮助你编写更清晰的代码。经过良好测试的代码更加可靠且更容易重构。

// Example using JavaScript and the Jest testing frameworktest('addition works correctly', () => {    expect(add(2, 3)).toBe(5);    expect(add(-1, 1)).toBe(0);    expect(add(0, 0)).toBe(0);});


9. 重构

请定期重构你的代码。随着需求的变化以及你对问题领域理解或加深,请相应地调整代码。项目的不断发展,重构有助于保持整洁的代码。在必要时,不要害怕重新阅读和改进现有代码。

比如我有一个函数,用来计算购物车中具有固定折扣百分比的商品总价:

function calculateTotalPrice(cartItems) {    let totalPrice = 0;    for (const item of cartItems) {        totalPrice += item.price;    }    return totalPrice - (totalPrice * 0.1); // Apply a 10% discount}

最开始,此函数计算总价并应用 10% 的固定折扣。随着项目的发展,你意识到需要支持可变折扣。为了重构代码使其更加灵活,需要引入折扣参数:

function calculateTotalPrice(cartItems, discountPercentage) {    if (discountPercentage < 0 || discountPercentage > 100) {        throw new Error("Discount percentage must be between 0 and 100.");    }
let totalPrice = 0; for (const item of cartItems) { totalPrice += item.price; }
const discountAmount = (totalPrice * discountPercentage) / 100; return totalPrice - discountAmount;}


在这段重构的代码中:

  • 在calculateTotalPrice函数中添加了discountPercentage参数,在调用该函数时可以指定折扣百分比。

  • 对discountPercentage 参数进行验证,以确保其落在有效范围内(0 到100%)。如果不在范围内,程序会抛出错误。

  • 折扣计算基于提供的discountPercentage参数,使该函数更加灵活,能够适应不断变化的需求。


通过此类方式重构代码,全面提高了它的灵活性与可维护性。开发者可以轻松地调整该函数来处理不同的折扣场景,而无需重写整个逻辑。

以上证明,随着项目发展和需求变化定期进行代码重构之重要性。

10. 版本控制

请使用 Git 等版本控制系统来跟踪代码更改。这些工具可使你与团队成员达成有效协作,在必要时还可恢复到以前的版本,能够维护项目开发的清晰历史记录。Git 等工具提供了代码审查、分支和合并功能,能够促进协作和代码整洁。

结语


编写整洁与干净的代码不仅仅是一套规则,更是开发者的一种心态和纪律。


它讲述是如何创建易于阅读、维护和扩展的软件规则,通过遵循这些实践经验和原则,你可以成为一名更优秀的开发人员,生成高质量的代码。你可以投入一些时间仔细检查其他人士的代码库,特别是在开源项目中,可能会引发一种启发性的体验。


通过类似的研究与总结,你将获得对不同编码风格和策略的宝贵经验。这种体验将使人能够提炼出编写原始代码、可持续代码库的精髓。


请大家记住,干净的代码是一个持续的旅程,通过不断地练习,它会成为你的自律习惯或第二天性,从而实现更高效、更愉快的软件开发生活。


作者:场长

评论