变量命名通常遵循以下规范:
1. 使用有意义的名称
名称应能表达变量保存的内容,避免使用没有语义的名称。
// 不推荐
let a = 20;
let x = "张三";
// 推荐
let userAge = 20;
let userName = "张三";循环中的临时变量可以适当简短:
for (let i = 0; i < users.length; i++) {
console.log(users[i]);
}2. 遵守语言规定
通常需要满足:
- 只能包含字母、数字、下划线等允许的字符
- 不能以数字开头
- 不能使用关键字
- 区分大小写的语言中,要注意大小写区别
let 2name; // 错误
let class; // 可能是关键字
let userName; // 正确3. 统一命名风格
常见风格包括:
小驼峰命名法 camelCase
常用于 JavaScript、Java、C# 等语言中的普通变量和函数。
let userName;
let orderTotal;
let isLoggedIn;大驼峰命名法 PascalCase
常用于类、接口、类型等。
class UserProfile {}
class OrderService {}下划线命名法 snake_case
常用于 Python、数据库字段和部分后端项目。
user_name = "Alice"
order_total = 100全大写下划线 UPPER_SNAKE_CASE
常用于常量。
const MAX_RETRY_COUNT = 3;
const DEFAULT_TIMEOUT = 5000;同一个项目中应优先遵守已有代码规范,不要混用多种风格。
4. 布尔变量使用明确前缀
布尔值最好体现“是或否”的含义,常用前缀有:
ishascanshouldenable
const isLoading = true;
const hasPermission = false;
const canEdit = true;
const shouldRetry = false;不推荐:
const status = true;
const user = false;推荐:
const isActive = true;
const isAdmin = false;5. 集合变量使用复数或集合含义
数组、列表、集合等应体现多个元素:
const users = [];
const productList = [];
const selectedItems = [];单个对象使用单数:
const user = {};
const product = {};不要使用容易混淆的名称:
const data = []; // 含义过于宽泛可以根据实际内容命名:
const userList = [];
const responseData = {};6. 名称应避免过长,但不能牺牲可读性
// 过短
const u = getUser();
// 过长
const userInformationDataFromRemoteServer = getUser();
// 合适
const user = getUser();
const remoteUserData = getUser();一般原则是:在当前作用域内,名称越清晰越好;作用域越小,名称可以越短。
7. 避免使用无意义的名称
不推荐:
let temp;
let thing;
let obj;
let data;
let value;
let result;这些名称并非绝对不能用,但应尽量说明具体含义:
let temporaryFilePath;
let requestPayload;
let userConfig;
let totalPrice;
let searchResult;8. 避免仅靠数字区分变量
const user1 = {};
const user2 = {};
const user3 = {};更好的方式是表达变量之间的关系:
const primaryUser = {};
const secondaryUser = {};
const guestUser = {};或者使用集合:
const users = [];9. 缩写要适度
常见、广泛认可的缩写可以使用:
const userId = 1;
const httpClient = {};
const apiUrl = "/users";不建议使用只有团队少数人理解的缩写:
const usrInf = {};
const procCfg = {};缩写的大小写也要统一。通常推荐:
userId
httpUrl
parseJson而不是:
userID
HTTPURL
parseJSON具体仍以项目已有规范为准。
10. 不要在变量名中重复类型信息
现代语言通常可以通过值、类型声明或上下文理解类型。
// 不推荐
const userString = "Alice";
const userArray = [];
const userObject = {};
// 推荐
const userName = "Alice";
const users = [];
const user = {};但在某些特殊场景中,类型前缀仍可能有价值,例如:
const rawUserData = "...";
const parsedUserData = {};11. 常量和可变变量区分清楚
const MAX_PAGE_SIZE = 100; // 常量
let currentPage = 1; // 会变化的变量如果语言支持不可变声明,优先使用不可变变量:
const userName = "Alice";只有确实需要重新赋值时才使用:
let retryCount = 0;
retryCount++;12. 不要使用容易混淆的字符
尽量避免变量名中混用:
l、I、1O、0- 大小写差异很小的名称
- 中文全角字符或特殊符号
const l = 1;
const I = 2;
const one = 1;常见推荐格式
| 场景 | 推荐命名 |
|---|---|
| 普通变量 | userName 或 user_name |
| 布尔变量 | isEnabled、hasPermission |
| 数组 | users、selectedItems |
| 常量 | MAX_RETRY_COUNT |
| 类 | UserService |
| 类型/接口 | UserConfig |
| 私有字段 | 根据语言规范使用 _name、#name 等 |
| 临时循环变量 | i、index、item |
最重要的原则可以概括为:
命名要准确、统一、可读,并且符合项目已有规范。不能为了“看起来规范”而牺牲语义。