本文档概述了编写清晰、可维护的 JavaScript 函数的核心原则。函数是 JavaScript 应用程序的基本构建块,遵循这些指南将使您的代码更具可读性、可测试性和可维护性。有关特定与函数相关的主题的详细信息,请参阅 函数参数 和 函数行为。
用于函数的干净代码方法强调了几个关键原则,这些原则共同作用以创建内聚、可维护的代码
干净函数设计的基石是单一职责原则:函数应该只做一件事,并且做好。这使得它们更容易理解、测试、重构和重用。
当函数试图做太多事情时,它们就变得难以维护和理解。请看这个比较
干净的实现方式将不同的操作分离到它们自己的函数中。如 README 第 300-321 行的示例所示,将活动客户端筛选逻辑提取到自己的函数(isActiveClient)中,使代码更具可读性和可维护性。
函数应在单一抽象级别上运行。这可以提高可读性,使代码更容易理解
函数参数的数量和处理方式极大地影响了代码的可读性和可维护性。通常来说,函数应尽可能少地接受参数(最好是两个或更少)。
来源:README.md232-285 README.md565-591
有关函数参数的更深入讨论,请参阅 函数参数。
函数名应清楚地表明函数的作用。一个命名得当的函数可以使代码具有自我文档化,并且更容易理解。
| 指南 | 糟糕的示例 | 良好的示例 |
|---|---|---|
| 保持描述性 | function add(date, month) | function addMonthToDate(month, date) |
| 使用动词短语 | function login() | function authenticateUser() |
| 匹配意图与实现 | function getUser() 同时修改数据 | function getUserAndLogAccess() |
| 保持一致 | getUsers(), fetchProducts(), retrieveItems() | getUsers(), getProducts(), getItems() |
当函数修改其作用域之外的状态时,会发生副作用。这些可能导致意外的行为和错误。
第 616-639 行的示例演示了修改全局变量如何产生副作用。改进后的版本返回一个新值,而不是修改现有值。
有关副作用管理的更深入介绍,请参阅 函数行为。
JavaScript 同时支持命令式和函数式编程风格。干净的代码通常倾向于函数式方法,以提高清晰度和可测试性。
第 742-795 行的示例对比了使用 for 循环的命令式方法和使用 reduce 方法计算代码行总数的函数式方法。
干净的函数通过抽象和多态性最大限度地减少了复杂的条件逻辑。
此表总结了确保高质量函数实现的关键实践
| 原则 | 描述 | 参考 |
|---|---|---|
| 避免类型检查 | 使用一致的接口而不是检查类型 | README.md911-973 |
| 移除死代码 | 消除未使用的函数和代码 | README.md1005-1035 |
| 避免过早优化 | 首先关注清晰度 | README.md977-1001 |
| 正确设置默认值 | 使用 Object.assign 或默认参数 | README.md512-563 |
| 消除重复 | 提取公共功能 | README.md426-508 |
设计函数时,遵循此流程将有助于您遵守干净代码原则
下图说明了各种函数原则如何相互关联以及与更广泛的代码组织的关系
来源:README.md600-696 README.md290-322
干净、设计良好的函数是可维护的 JavaScript 应用程序的基础。通过遵循本文档中概述的原则,您可以创建更易于理解、测试和维护的函数。有关更具体的指导,请参阅 函数参数 和 函数行为。