菜单

变量

相关源文件

目的与范围

本文档概述了 clean-code-javascript 存储库中描述的 JavaScript 变量命名、声明和使用方面的最佳实践。正确管理的变量是编写干净、可维护代码的基础。这些指南有助于开发人员编写更易于阅读、理解和长期维护的代码。

本节的原则专门关注与变量相关的实践。有关函数参数的相关主题,请参阅函数参数,有关对象属性命名约定,请参阅对象和数据结构

来源: README.md46-228

变量命名原则

图示:变量命名对代码可读性的影响

来源: README.md48-107

使用含义清晰且可读的变量名

变量名应清晰地传达其目的和内容。避免使用缩写和单个字母的名称,除非是局部性很强的临时变量,例如循环计数器。

示例

  • 命名不当:日期变量使用 yyyymmdstr
  • 命名得当:相同日期变量使用 currentDate

描述性名称可以使代码具有自文档化功能,并减少对注释的需求。

来源: README.md48-60

对同类型变量使用相同的词汇

在命名约定上保持一致。当你在应用程序的不同部分处理相同类型的数据时,使用相同的命名约定以避免混淆。

示例

  • 不一致:使用 getUserInfo()getClientData()getCustomerRecord() 来执行类似操作
  • 一致:所有用户检索函数都统一使用 getUser()

这种一致性创造了一个可预测的模式,使你的代码更容易遵循。

来源: README.md64-78

使用可搜索的名称

代码的阅读频率远高于编写频率。使用独特且可搜索的名称可以帮助他人(以及未来的你)更轻松地找到相关代码。

示例

  • 不可搜索:使用像 86400000(一天中的毫秒数)这样的魔法数字
  • 可搜索:使用命名常量,如 MILLISECONDS_PER_DAY

这种做法对于常量和配置值尤其重要。

来源: README.md82-107

变量声明和使用

图示:变量声明模式

来源: README.md110-226

使用解释性变量

通过将复杂表达式的各个部分提取到具有描述性名称的变量中,来分解复杂表达式。这使得代码更具可读性,并有助于记录意图。

示例

这种方法阐明了复杂表达式的每个部分意味着什么。

来源: README.md110-130

避免心智映射

不要强迫你的代码阅读者在脑海中翻译变量。明确的变量名比隐晦的变量名更好。

示例

  • 不良实践:在循环遍历地点时使用单个字母变量,例如 l
  • 良好实践:使用描述性名称,例如 location

这对于循环和回调尤其重要,因为它们的上下文可能不那么明显。

来源: README.md134-165

不要添加不必要的上下文

如果你的类/对象名称已经提供了上下文,请不要在变量名中重复它。这会造成冗余,使代码更冗长。

示例

  • 冗余: Car 对象及其属性 carMakecarModelcarColor
  • 干净: Car 对象及其属性 makemodelcolor

当容器(类、对象、模块)已经提供了上下文时,变量名应该更短、更简洁。

来源: README.md169-200

使用默认参数代替短路求值

ES6 的默认参数功能提供了一种比条件表达式或逻辑运算符更简洁的提供回退值的方式。

示例

请注意,默认参数仅适用于 undefined 值,而不适用于其他假值,如空字符串或 null

来源: README.md204-226

最佳实践总结

原则不良实践良好实践
有意义的名称yyyymmdstrcurrentDate
一致的词汇getUserInfo(), getClientData()统一使用 getUser()
可搜索的名称setTimeout(blastOff, 86400000)setTimeout(blastOff, MILLISECONDS_PER_DAY)
解释性变量address.match(cityZipCodeRegex)[1]const [_, city, zipCode] = address.match(cityZipCodeRegex)
避免心智映射locations.forEach(l => {...})locations.forEach(location => {...})
上下文管理car.carColorcar.color
默认参数`name

来源: README.md46-228

变量作用域和生命周期管理

图示:变量声明类型及其作用域

来源: README.md616-640

变量声明最佳实践

  1. 默认使用 const - 这使你的变量在引用上不可变,防止意外重新赋值。

  2. 仅在必要时使用 let - 当你需要重新赋值变量时,使用 let,但保持其作用域尽可能小。

  3. 避免使用 var - 它具有函数作用域而非块作用域,这可能导致意外行为。

  4. 在变量使用附近声明变量 - 这将相关代码放在一起,提高了可读性。

  5. 保持变量作用域尽可能小 - 这减少了副作用的可能性,并使代码更容易理解。

来源: README.md46-228 README.md616-640

对代码质量的影响

妥善管理变量对整体代码质量有显著影响

  1. 可读性 - 命名良好的变量使代码具有自文档化功能
  2. 可维护性 - 清晰的变量使用模式使代码更易于修改
  3. 调试 - 正确的作用域和命名使问题更易于追踪
  4. 协作 - 一致的变量实践提高了团队效率
  5. 可测试性 - 管理良好的变量使代码更易于单独测试

遵循这些变量最佳实践,为您的项目奠定干净代码的基础。

来源: README.md18-44