C++编程规范常识(学前必看)

变量命名神器

  1. CODELF(vscode有插件)

1. 一般命名法

(1)小驼峰命名法

bool isMelonRipe;  //变量
int getMyCoin();   //函数

(2)大驼峰命名法

struct MyStruct;  // 结构体
class MyClass;    // 类

(3)下划线命名法

int an_integer_var;  // 变量用下划线
void myFunction();   //函数用小驼峰

(4)大写单词命名法

const float GRAVITY = 9.8   // 常量
#define PI 3.14             // 宏定义

(5)匈牙利命名法

//变量名 = 属性 + 类型 + 对象描述
class Block{
    
    
    private:
    double m_dLong;   // 长
    double m_dWidth;  // 宽
    double m_dHeight; // 高
}

2. 函数的命名

前缀词 + 名词(is/can/has/ … + something)

其中,前缀词包括:

  • 表示是否符合的状态 —— is
  • 表示能否执行的状态 —— can
  • 表示是否包含的状态 —— has/include/contains
  • 表示是否需要的状态 —— should/needs

例如:

  1. 判断用户是否存在 —— isUserNameExist()
  2. 判断用户名是否应该修改 —— shouldUserNameChange()
  3. 判断宾馆是否具有wifi —— hasWifi()
  4. 判断宾馆能否预定 —— canBook()

3. 数据获取的命名

  • 从数据结构获取 —— get
  • 通过计算获取 —— calculate/cal
  • 数据库获取 —— find/query
  • 从配置文件获取 —— load/parse/build
  • 从网络获取 —— fetch

例如:

  1. 直接从对象、数据结构中获取数据 —— getUserId()
  2. 通过计算获取数据 —— calculateUserAverageScore()
  3. 数据库查找数据 —— findUserName()/queryUserNmae()
  4. 从配置文件加载数据 —— loadUserInfo()/parseUserInfo()/buildUserInfo()
  5. 网络请求获取数据 —— fetchUserInfo()

4. 函数的形参少用bool型

5. 字符串组合拼接

字符串格式化(C++):snprintf, stringstream

6. 避免使用魔法数字

可以使用枚举类型来解决。

7. 冗长函数分解原则

一般需要写注释的地方可以封装成新的函数。

8. 数字系列的命名

例如a1,a2,这样命名纯属误导,没有提供正确信息,对可读性带来危害。
使用sourceChars/source和destinationChars/destionation作为参数名。

9. 函数命名动词选取大全

避免滥用单词,例如:

  • 万能的get
  • 万能的add

各类函数命名动词详细总结:

  • Creat —— 创建(实例创建/工厂方法)

  • Initialize —— 初始化(实例/属性)

  • Load —— 加载(配置)

  • Destory —— 销毁

  • Uninitialize —— 反初始化(实例/属性)

  • Get —— 通过获取(属性)

  • Fetch —— 获取(网络请求)

  • Calculate —— 计算

  • Read —— 读取(文件/配置)

  • Query —— 查询

  • Find/Search —— 查找(数据库/集合中)

  • Receive —— 接收

  • Pull —— 拉取

  • Set —— 通过设置(属性)

  • Write —— 写入(文件/配置)

  • Put —— 放入

  • Push —— 存入/推送(通知)

  • Reset —— 重置(标记/状态)

  • Refresh —— 刷新(页面/缓存)

  • Update —— 更新(配置/状态)

  • Add —— 通过添加

  • Append —— 追加(尾部)

  • Delete —— 删除

  • Remove —— 移除

  • Open —— 开启(开启状态/打开文件)

  • Start —— 开始(流程)

  • Launch —— 发送/启动(程序)

  • Close —— 关闭(关闭状态/关闭文件)

  • Stop —— 停止(流程)

  • Finish —— 完成(流程)

10. 给函数取个好名字

  1. 集合类型相关数据处理
动词 用途 示例
Filter 过滤/筛选(强调按照某些条件) FilterByName
Merge 合并(有时会带上合并规则) MergeTwoConfig
Concat 拼接(直接在结尾添加) ConcatToArray
Split 分割 SplitInput
Deduplicate 去重(去重完全相同的项) DeduplicateList
Reverse 颠倒/反向排序 ReverseRecord
Sort 排序(有时会带上排序规则) SortDealsByAmount
Fill 填充(一般会进行覆盖) FillAmountList
  1. 通用业务数据处理
动词 用途 示例
Parse 解析(解析提取内容) ParseFromJson/ParseResult
Analyse 分析 AnalyseLocation
Convert 类型转换 ConvertToString
Format 格式化数据 FormatToLocalString
Validate 合法性/有效性的校验 ValidateUserInputs
Ensure 期待值的校验 EnsureUserAge
Compose 组成(由多项内容组合成一个结果) ComposeMessage
Encode 编码(依赖约定的编码格式) EncodeUrl
Decode 解码(依赖约定的编码格式) DecodeUrl
Encrypt 数据加密(依赖约定的加密算法) EncryptContent
Backup 备份(注意拷贝方式,避免误导) BackupUserSettings
Restore 恢复 RestoreUserSettings
Import 导入(按照特定的格式的文件转换) ImportFromFile
Export 导出(用于转换成特定格式的文件) ExportToFile
Compress 压缩(依赖约定的算法) CompressOversizedFile
Decompress 解压缩(依赖约定的算法) DecompressOversizedFile

11. 代码命名容易出现的问题

  1. 取名过于简单,无法清晰表达含义
  2. 命名风格不一,影响代码阅读
  3. 没有参照规范命名
  4. 修改代码不更新注释,造成误导
  5. 无意义的注释(如日志型注释,废弃代码注释等)
  6. 过多篇幅的注释
  7. 函数过长,缺乏提炼
  8. 重复代码不做复用
  9. 不合理的变量/常量定义
  10. 定义时不考虑解耦
  11. 使用常量代替应该动态生成的内容,例如文件路径写成固定形式

猜你喜欢

转载自blog.csdn.net/qq_41821678/article/details/125826120
今日推荐