良好的命名习惯
变量命名
匈牙利记法
变量名的命名应遵循匈牙利记法,即前缀+类型+变量名
。具体规则如下:
前后缀
表示变量的作用域和类型,
标准 | 做法 |
---|---|
作用域 | m成员变量 |
s局部变量 | |
g全局变量 | |
后缀 | 参数重名 var_ 和var |
类型+用途的前缀词 | bool is can has need... |
类型
类型:表示变量的数据类型,比如int、char、float等;
对于一些典型的变量名,既然类型已经明确,在命名中添加就显得多余,无需再次指定。
变量名
变量的具体名称
要求:
- 简洁明了,便于联想:能够清晰地表达变量的含义。
- 明确计量对象(What) 和 计量单位(Count, Time, Day, Minute, Second)
- 方便使用全局字符查找——便于获取某个范围中的关键信息。
思考三个问题可以提供帮助:
- 它为什么存在(是否关联什么东西),
- 它用来做什么事
- 它应该怎么用。
该避免什么
无意义改进
- 同名+数字 —— 要根据用途做更具体的区分
void copyChars(char* chPtr1, char* chPtr2);
void copyChars(char* sourceChPtr, char* destinationChPtr);
- 近义词 —— 到底有没有区分的必要。合并/更清晰的命名
class Product{};
class ProductInfo{};
class ProductData{};
误导
-
自定义的缩写、简写 —— 使用通用的缩写
-
多义词 —— 添加上下文 如迁移到类或模块中 / 更换添加对应单词
Unix平台:hp,aix,sco
Windows:Registry,Monitor
-
变量类型
xxxList xxxMap 等 包含特定数据类型的名称
-
外形相似
变量名 中间一个单词/字母外 其余一样
O 0 o,i 1 l 等字符真的很难区分捏
误用保留值
Cpp标准规定,由库使用,而不建议用户使用的保留值:(当然,自己写库除外)
保留 | 示例 |
---|---|
_大写字母... | _Alice _BOB |
__小写字母... | __cali _dAVi |
入参命名
设置成员变量时,入参可以加_
后缀
void setVal(int age_) {
age = age_;
}
函数命名
规则
命名函数
- 函数命名不应该过于追求简短,要尽可能清晰的表达函数的作用。
- 高质量的函数命名是可以让函数体本身或被调用处无需任何注释的。
- 函数命名应该偏重于函数的功能,而非函数执行的过程。
尽量使用正逻辑、参数尽量单一(拆解复杂的判断到若干个判断型函数 然后& | !)
命名格式:
- 类方法:
前缀词 + 名词
- 普通方法/工具方法:
前缀词 + 名词 + 动词
前缀
考虑作用域
全局/非全局
-
函数名第一个字母必须大写
-
全局函数必须以小写前缀“g”开头
判断型函数
表示状态 | 前缀词 |
---|---|
符合 | is |
可执行 | can |
已包含 | has |
includes | |
contains | |
需要/应该 | should |
needs |
数据获取
数据获取的方式,进行命名的区分。
都用get可读性会很差。
获取方式 | 前缀词 |
---|---|
直接从 对象/数据结构 中 | get 常常被滥用 |
通过计算 | calculate / cal |
查询 | query |
数据库查找 | find / search |
网络请求获取数据 | fetch |
远程传输 - 接收 | receive |
远程传输 - 拉取 | pull |
配置文件 - 直接加载 | load |
配置文件 - 需要解析 | parse |
配置文件 - 需要拼接 | build |
名词
自己把握。
动词
创建/销毁
动词 | 用途 | 示例 |
---|---|---|
Create | 创建实例,常用于实例化方法和工厂方法的命名 | CreateInstance |
Initialize | 初始化实例的属性和设置,Initialize本身也可作为类方法用来初始化 | InitializeInstance,Initialize |
Load | 加载配置,根据配置创建内容 | LoadFromConfig |
Destroy | 销毁实例,常用语析构方法 | DestroyInstance |
Uninitialize | 清理实例的属性和设置,通常和Initialize对应 | UninitializeInstance,Uninitialize |
获取/设置
动词 | 用途 | 示例 |
---|---|---|
Get | 常用于取属性的类方法命名,也可作为通用获取方法命名 | GetStartTime |
Fetch | 通过网络请求获取内容 | FetchAllUsers |
Calculate | 通过计算获取内容 | CalculateTotalAmount |
Read | 读取(多用于文件,配置等) | ReadFile,ReadConfig |
Query | 查询 | QueryRemainingAmount |
Find | 查找(多用于数据库,集合等),和search相似 | FindOrder |
Receive | 接收(多用于文件,消息等) | ReceiveNewMessage |
Pull | 拉取 | PullLastestSourceCode |
Set | 常用于设置属性的类方法命名,也可作为通用设置方法命名 | SetStartTime |
Write | 写入(文件/配置等) | WriteFile,WriteConfig |
Put | 放入 | PutUserWithId |
Push | 存入,推送(通知) | PushNotification |
更新
动词 | 用途 | 示例 |
---|---|---|
Reset | 强调重置(标记,状态) | ResetTimer |
Refresh | 用于命名刷新(多用于页面,缓存等) | RefreshCurrentPage |
Update | 更新(多用于配置,状态等) | UpdateUserSetting |
添加/移除
动词 | 用途 | 示例 |
---|---|---|
Add | 用于通用添加方法命名 | AddNewStudent |
Append | 强调在尾部添加(追加) | AppendCharacter |
Insert | 强调插入(可以在任意位置) | InsertCharacter |
Delete | 表示删除,和Remove相近 | DeleteDirectory |
Remove | 表示移除,和Delete相近 | RemoveInvalidDeals |
启动/停止
动词 | 用途 | 示例 |
---|---|---|
Open | 开启(多用于开启状态,打开文件等) | OpenEnhanceMode |
Start | 开始(强调开始某个流程) | StartPortListening |
Launch | 发动/启动(多用于启动程序,服务) | LaunchAssistService |
Close | 关闭(多用于关闭状态,关闭文件等) | CloseEnhanceMode |
Stop | 停止(强调流程的终止) | StopPortListening |
Pause | 暂停(强调流程的暂停,有可能后续会继续开启) | PausePageLoading |
Finish | 完成(强调流程的完成) | FinishRequesting |
集合类型相关数据处理
动词 | 用途 | 示例 |
---|---|---|
Filter | 过滤,筛选(强调按照某些条件) | FilterByName |
Merge | 合并(有时会带上合并规则) | MergeTwoConfig |
Concat | 拼接(直接在结尾添加) | ConcatToArray |
Split | 分割 | SplitInput |
Deduplicate | 去重(去重完全相同的项) | DeduplicateList |
Reverse | 颠倒,反向排列 | ReverseRecord |
Sort | 排序(有时会带上排序规则) | SortDealsByAmount |
Fill | 填充(一般会进行覆盖) | FillAmountList |
通用业务数据处理
动词 | 用途 | 示例 |
---|---|---|
Parse | 解析(解析成某些格式,解析提取某些内容) | ParseFromJson,ParseResult |
Analyse | 分析(不一定能通过简单的方式获取) | AnalyseLocation |
Convert | 类型转换(通常用于从一个类型转换到另一种类型) | ConvertToString |
Format | 格式化数据 | FormatToLocaleString |
Validate | 合法性/有效性的校验 | ValidateUserInputs |
Ensure | 期待值的校验 | EnsureUserAge |
Compose | 组成(一般由多项内容组成一个结果) | ComposeMessage |
Encode | 编码(依赖约定的编码格式) | EncodeUrl |
Decode | 解码(依赖约定的解码格式) | DecodeUrl |
Encrypt | 数据加密(依赖约定的加密算法) | EncryptContent |
Decrypt | 数据解密(依赖约定的解密算法) | DecryptContent |
Backup | 备份(需要注意拷贝方式,避免误导) | BackupUserSettings |
Restore | 恢复 | RestoreUserSettings |
Import | 导入(通常用于按照特定格式的文件转换) | ImportFromFile |
Export | 导出(通常用于转换成特定格式的文件) | ExportToFile |
Compress | 压缩(依赖约定的算法) | CompressOversizedFile |
Decompress | 解压缩(依赖约定的算法) | DecompressOversizedFile |