本文档概述了 clean-code-javascript 存储库中描述的 JavaScript 变量命名、声明和使用方面的最佳实践。正确管理的变量是编写干净、可维护代码的基础。这些指南有助于开发人员编写更易于阅读、理解和长期维护的代码。
本节的原则专门关注与变量相关的实践。有关函数参数的相关主题,请参阅函数参数,有关对象属性命名约定,请参阅对象和数据结构。
来源: README.md46-228
来源: README.md48-107
变量名应清晰地传达其目的和内容。避免使用缩写和单个字母的名称,除非是局部性很强的临时变量,例如循环计数器。
示例
yyyymmdstrcurrentDate描述性名称可以使代码具有自文档化功能,并减少对注释的需求。
来源: README.md48-60
在命名约定上保持一致。当你在应用程序的不同部分处理相同类型的数据时,使用相同的命名约定以避免混淆。
示例
getUserInfo()、getClientData() 和 getCustomerRecord() 来执行类似操作getUser()这种一致性创造了一个可预测的模式,使你的代码更容易遵循。
来源: README.md64-78
代码的阅读频率远高于编写频率。使用独特且可搜索的名称可以帮助他人(以及未来的你)更轻松地找到相关代码。
示例
86400000(一天中的毫秒数)这样的魔法数字MILLISECONDS_PER_DAY这种做法对于常量和配置值尤其重要。
来源: README.md82-107
来源: README.md110-226
通过将复杂表达式的各个部分提取到具有描述性名称的变量中,来分解复杂表达式。这使得代码更具可读性,并有助于记录意图。
示例
这种方法阐明了复杂表达式的每个部分意味着什么。
来源: README.md110-130
不要强迫你的代码阅读者在脑海中翻译变量。明确的变量名比隐晦的变量名更好。
示例
llocation这对于循环和回调尤其重要,因为它们的上下文可能不那么明显。
来源: README.md134-165
如果你的类/对象名称已经提供了上下文,请不要在变量名中重复它。这会造成冗余,使代码更冗长。
示例
Car 对象及其属性 carMake、carModel、carColorCar 对象及其属性 make、model、color当容器(类、对象、模块)已经提供了上下文时,变量名应该更短、更简洁。
来源: README.md169-200
ES6 的默认参数功能提供了一种比条件表达式或逻辑运算符更简洁的提供回退值的方式。
示例
请注意,默认参数仅适用于 undefined 值,而不适用于其他假值,如空字符串或 null。
来源: README.md204-226
| 原则 | 不良实践 | 良好实践 |
|---|---|---|
| 有意义的名称 | yyyymmdstr | currentDate |
| 一致的词汇 | 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.carColor | car.color |
| 默认参数 | `name |
来源: README.md46-228
来源: README.md616-640
默认使用 const - 这使你的变量在引用上不可变,防止意外重新赋值。
仅在必要时使用 let - 当你需要重新赋值变量时,使用 let,但保持其作用域尽可能小。
避免使用 var - 它具有函数作用域而非块作用域,这可能导致意外行为。
在变量使用附近声明变量 - 这将相关代码放在一起,提高了可读性。
保持变量作用域尽可能小 - 这减少了副作用的可能性,并使代码更容易理解。
来源: README.md46-228 README.md616-640
妥善管理变量对整体代码质量有显著影响
遵循这些变量最佳实践,为您的项目奠定干净代码的基础。
来源: README.md18-44