C++编程规范常识(学前必看)
变量命名神器
- 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
例如:
- 判断用户是否存在 —— isUserNameExist()
- 判断用户名是否应该修改 —— shouldUserNameChange()
- 判断宾馆是否具有wifi —— hasWifi()
- 判断宾馆能否预定 —— canBook()
3. 数据获取的命名
- 从数据结构获取 —— get
- 通过计算获取 —— calculate/cal
- 数据库获取 —— find/query
- 从配置文件获取 —— load/parse/build
- 从网络获取 —— fetch
例如:
- 直接从对象、数据结构中获取数据 —— getUserId()
- 通过计算获取数据 —— calculateUserAverageScore()
- 数据库查找数据 —— findUserName()/queryUserNmae()
- 从配置文件加载数据 —— loadUserInfo()/parseUserInfo()/buildUserInfo()
- 网络请求获取数据 —— 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. 给函数取个好名字
- 集合类型相关数据处理
动词 | 用途 | 示例 |
---|---|---|
Filter | 过滤/筛选(强调按照某些条件) | FilterByName |
Merge | 合并(有时会带上合并规则) | MergeTwoConfig |
Concat | 拼接(直接在结尾添加) | ConcatToArray |
Split | 分割 | SplitInput |
Deduplicate | 去重(去重完全相同的项) | DeduplicateList |
Reverse | 颠倒/反向排序 | ReverseRecord |
Sort | 排序(有时会带上排序规则) | SortDealsByAmount |
Fill | 填充(一般会进行覆盖) | FillAmountList |
- 通用业务数据处理
动词 | 用途 | 示例 |
---|---|---|
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. 代码命名容易出现的问题
- 取名过于简单,无法清晰表达含义
- 命名风格不一,影响代码阅读
- 没有参照规范命名
- 修改代码不更新注释,造成误导
- 无意义的注释(如日志型注释,废弃代码注释等)
- 过多篇幅的注释
- 函数过长,缺乏提炼
- 重复代码不做复用
- 不合理的变量/常量定义
- 定义时不考虑解耦
- 使用常量代替应该动态生成的内容,例如文件路径写成固定形式
C++编程规范常识(学前必看)相关推荐
- python编程规范 谷歌_Python最新编程规范,新手必学
最近,团队又来了几个小伙伴,经过一段时间磨合之后,发现彼此之间还是比较默契的,但有一个很大的问题是,每个人的编程风格和习惯都不同,导致现在代码看起来非常混乱. 这里还要注意:不管你是想学Python还 ...
- 【C/C++】学前必看知识概览
注意:本章旨在了解c语言的基础知识,对c语言有大概的认识! 已有c基础的同学可移步我的专题篇享受更加深入的讲解! 目录 1.什么是c语言? 2.第一个c语言程序 3.数据类型 4.变量,常量,字符串 ...
- hualinux java 1.17:java开发规范(新手必看)
有不少java初学者都不知道java开发规范的,所以网上找了一个国内电商算是权威的java开发手册 国内最大的电商就是淘宝了,我们向老大学习. 根据<阿里巴巴Java开发手册>中" ...
- Java大神推荐,java编程基础必备(必看)
在没有以前的操作习惯的错误情况下,反而容易接受新知识,所以不要因为自己对java一无所知而自卑,相反,这是菜鸟们的优势,但是如何才能从一个菜鸟历练成大神呢,当然是需要学习了,不学习就想成为大神,就是在 ...
- Shell脚本编程项目实战(必看)
目录 1.脚本编程 2.项目实例 2.1 MAC记录与端口扫描脚本 2.2.开发系统监控脚本 2.3.实现dns及apache服务的一键化部署 1.脚本编程 ■ 脚本编程步骤 ● 需求分析 ● 命令测 ...
- 修改监控录像时间的方法以及基础常识,必看!
监控时间日期水印也叫time code,是监控摄像机在记录图像信号的时候,针对每一幅图像记录的唯一的时间编码.一种应用于流的数字信号.该信号为视频中的每个帧都分配一个数字,用以表示小时.分钟.秒钟和帧 ...
- 修改监控录像时间的方法以及基础常识,必看!...
监控时间日期水印也叫time code,是监控摄像机在记录图像信号的时候,针对每一幅图像记录的唯一的时间编码.一种应用于流的数字信号.该信号为视频中的每个帧都分配一个数字,用以表示小时.分钟.秒钟和帧 ...
- Java程序员必看经典书籍,助你早日打通任督二脉,Java菜鸟教程视频
一.Java四大神兽,神兽在手,天下我有! 1.<Java核心技术卷一> 唯一可以和<Java编程思想>媲美的一本Java入门书籍.单从技术的角度来看,前者更好一些.但上升到思 ...
- Java程序员必看经典书籍,助你早日打通任督二脉
一.Java四大神兽,神兽在手,天下我有! 1.<Java核心技术卷一> 唯一可以和<Java编程思想>媲美的一本Java入门书籍.单从技术的角度来看,前者更好一些.但上升到思 ...
最新文章
- 终端(terminal)、tty、shell、控制台(console)、bash之间的区别与联系
- linux无法解析主机地址(could not resolve host)解决办法
- mysql declare 赋值_sql server和mysql变量赋值的区别 以及 MySql Declare(转)
- python笔记:jieba(中文分词)
- 11、HTML <head>标签
- pintos实验三文档_实验室如何实现智能、数字化管理?
- Windows消息机制详解-2
- linux下getrlimit与sysconf函数
- 2018年黑龙江由俄进口原油2725.2万吨同比增加67.1%
- 告别只会调参和调包,全球顶会论文审稿人带你7天玩转图像分割
- wangEditor-3.1.1 自己扩展的,增加代码块行号
- MySQL中视图和触发器学习
- uiactionsheet 代理_iOS UIActionSheet (点击事件笔记)
- [UNIX]The UNIXHATERS Handbook
- php 获取服务器端口,PHP获取当前服务器详细信息
- 单片机---HLK-W801并口驱动ST7789
- 基于matlab的电池管理系统开发,使用 Simulink 和基于模型的设计开发电池管理系统...
- 基于C#的工控上位机软件开发从入门到学废,需要几步?
- 一篇不错的项目管理之道
- python实时抢网页红包_Python实现自动抢红包功能