良好的函数/变量命名

良好的命名习惯

变量命名

匈牙利记法

变量名的命名应遵循匈牙利记法,即前缀+类型+变量名。具体规则如下:

前后缀

表示变量的作用域和类型,

标准做法
作用域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_;
}

函数命名

规则

命名函数

  1. 函数命名不应该过于追求简短,要尽可能清晰的表达函数的作用。
  2. 高质量的函数命名是可以让函数体本身或被调用处无需任何注释的。
  3. 函数命名应该偏重于函数的功能,而非函数执行的过程。

尽量使用正逻辑、参数尽量单一(拆解复杂的判断到若干个判断型函数 然后& | !)

命名格式:

  • 类方法:前缀词 + 名词
  • 普通方法/工具方法:前缀词 + 名词 + 动词

前缀

考虑作用域

全局/非全局

  • 函数名第一个字母必须大写

  • 全局函数必须以小写前缀“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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值