变量命名神器

  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. 使用常量代替应该动态生成的内容,例如文件路径写成固定形式

C++编程规范常识(学前必看)相关推荐

  1. python编程规范 谷歌_Python最新编程规范,新手必学

    最近,团队又来了几个小伙伴,经过一段时间磨合之后,发现彼此之间还是比较默契的,但有一个很大的问题是,每个人的编程风格和习惯都不同,导致现在代码看起来非常混乱. 这里还要注意:不管你是想学Python还 ...

  2. 【C/C++】学前必看知识概览

    注意:本章旨在了解c语言的基础知识,对c语言有大概的认识! 已有c基础的同学可移步我的专题篇享受更加深入的讲解! 目录 1.什么是c语言? 2.第一个c语言程序 3.数据类型 4.变量,常量,字符串 ...

  3. hualinux java 1.17:java开发规范(新手必看)

    有不少java初学者都不知道java开发规范的,所以网上找了一个国内电商算是权威的java开发手册 国内最大的电商就是淘宝了,我们向老大学习. 根据<阿里巴巴Java开发手册>中" ...

  4. Java大神推荐,java编程基础必备(必看)

    在没有以前的操作习惯的错误情况下,反而容易接受新知识,所以不要因为自己对java一无所知而自卑,相反,这是菜鸟们的优势,但是如何才能从一个菜鸟历练成大神呢,当然是需要学习了,不学习就想成为大神,就是在 ...

  5. Shell脚本编程项目实战(必看)

    目录 1.脚本编程 2.项目实例 2.1 MAC记录与端口扫描脚本 2.2.开发系统监控脚本 2.3.实现dns及apache服务的一键化部署 1.脚本编程 ■ 脚本编程步骤 ● 需求分析 ● 命令测 ...

  6. 修改监控录像时间的方法以及基础常识,必看!

    监控时间日期水印也叫time code,是监控摄像机在记录图像信号的时候,针对每一幅图像记录的唯一的时间编码.一种应用于流的数字信号.该信号为视频中的每个帧都分配一个数字,用以表示小时.分钟.秒钟和帧 ...

  7. 修改监控录像时间的方法以及基础常识,必看!...

    监控时间日期水印也叫time code,是监控摄像机在记录图像信号的时候,针对每一幅图像记录的唯一的时间编码.一种应用于流的数字信号.该信号为视频中的每个帧都分配一个数字,用以表示小时.分钟.秒钟和帧 ...

  8. Java程序员必看经典书籍,助你早日打通任督二脉,Java菜鸟教程视频

    一.Java四大神兽,神兽在手,天下我有! 1.<Java核心技术卷一> 唯一可以和<Java编程思想>媲美的一本Java入门书籍.单从技术的角度来看,前者更好一些.但上升到思 ...

  9. Java程序员必看经典书籍,助你早日打通任督二脉

    一.Java四大神兽,神兽在手,天下我有! 1.<Java核心技术卷一> 唯一可以和<Java编程思想>媲美的一本Java入门书籍.单从技术的角度来看,前者更好一些.但上升到思 ...

最新文章

  1. 终端(terminal)、tty、shell、控制台(console)、bash之间的区别与联系
  2. linux无法解析主机地址(could not resolve host)解决办法
  3. mysql declare 赋值_sql server和mysql变量赋值的区别 以及 MySql Declare(转)
  4. python笔记:jieba(中文分词)
  5. 11、HTML <head>标签
  6. pintos实验三文档_实验室如何实现智能、数字化管理?
  7. Windows消息机制详解-2
  8. linux下getrlimit与sysconf函数
  9. 2018年黑龙江由俄进口原油2725.2万吨同比增加67.1%
  10. 告别只会调参和调包,全球顶会论文审稿人带你7天玩转图像分割
  11. wangEditor-3.1.1 自己扩展的,增加代码块行号
  12. MySQL中视图和触发器学习
  13. uiactionsheet 代理_iOS UIActionSheet (点击事件笔记)
  14. [UNIX]The UNIXHATERS Handbook
  15. php 获取服务器端口,PHP获取当前服务器详细信息
  16. 单片机---HLK-W801并口驱动ST7789
  17. 基于matlab的电池管理系统开发,使用 Simulink 和基于模型的设计开发电池管理系统...
  18. 基于C#的工控上位机软件开发从入门到学废,需要几步?
  19. 一篇不错的项目管理之道
  20. python实时抢网页红包_Python实现自动抢红包功能

热门文章

  1. 如何使用R语言绘制生存曲线图
  2. Postgre-XL环境搭建
  3. 计算机可编程控制系统实际应用,可编程控制技术应用
  4. flutter 实战天猫首页案例
  5. 无限重启-千牛app
  6. ecshop商品详细页面的快速购物功能的实现
  7. 拆解组新的GAN:解耦表征MixNMatch
  8. 《Rank-LIME: Local Model-Agnostic Feature Attribution for Learning to Rank》论文精读
  9. 一道小学数学竞赛题:到底有几个三角形?
  10. uniapp微信小程序传参方法和注意事项