参考资料:https://www.cnblogs.com/dolphin0520/p/10567879.html

一、常见的函数命名风格

目前,函数最常见的两种命名风格:

(1)驼峰命名法: 多个单词组成一个名称时,第一个单词全部小写,后面单词首字母大写;如:

void setUserName(string userName);

(2)帕斯卡命名法:多个单词组成一个名称时,每个单词的首字母大写;如:

void SetUserName(string userName);

两种命名风格都是OK的,但要保证一点,对于一个团队或者一个项目,需要根据语言本身的推荐命名方式做好约定。

二、函数命名最高境界

我认为函数命名的最高境界是:见字如面,看到函数的名字就知道这个函数的功能。

比如上面的函数:

void SetUserName(string userName);

但是下面的这个函数命名就不是一个好的命名:

string AddCharacter(string originString, char ch);

这个函数,一咋看,还不错,从函数字面意思看是给某个字符串添加一个字符。但到底是在原有字符串首部添加,还是在原有字符串末尾追加?亦或者是在某个固定位置插入呢?从函数名字完全看不出来这个函数的真正意图,只能继续往下读函数的具体实现才知道。

下面这几个名字就比上面要好得多:

string AppendCharacter(string originString, char ch);     //追加到末尾

string InsertCharacter(string originString, char ch, int insertPosition); //插入到指定位置

三、函数命名关键要领

(1)要领1:动词选取要精准

通常来说, 动词决定了一个函数要采取什么“动作”。动词取得好,一个函数命名已经成功了80%。

常用的动词表:

类别 单词
添加/插入/创建/初始化/加载  add/append/insert/create/initialize/load
删除/销毁 delete/remove/destroy/drop
打开/开始/启动 open/start
关闭   close/stop
获取/读取/查找/查询 get/fetch/acquire/read/search/find/query
设置/重置/放入/写入/释放/刷新 set/reset/put/write/release/refresh
发送/推送 send/push
接收/拉取 receive/pull
提交/撤销/取消 submit/cancel
收集/采集/选取/选择 collect/pic/select
提取/解析 sub/extract/parse
编码/解码 encode/decode
填充/打包/压缩 fill/pack/compress
清空/拆包/解压 flush/clear/unpack/decompress
增加/减少 increase/decrease/reduce
分隔/拼接 split/join/concat
过滤/校验/检测 filter/valid/check

(2)名词使用领域词汇:

举个例子:集合的容量通常用capacity、集合实际元素个数用size、字符串长度用length,这种就遵循大家的使用习惯,不要用size去形容字符串的长度

再比如,加入使用到建造者模式,那么通常用build作为函数名字,这个时候不要另辟蹊径,用create作为函数名字,使用大家约定俗称的命名习惯可以大大增加代码的可读性。

常用名词表

类别 单词
容量/大小/长度 capacity/size/length
实例/上下文 instance/context
配置 config/settings
头部/前面/前一个/第一个 header/front/previous/first
尾部/后面/后一个/最后一个 tail/back/next/last
区间/区域/某一部分/范围/规模 range/interval/region/area/section/scope/scale
缓存/缓冲/会话 cache/buffer/session
本地/局部/全局 local/global
成员/元素 member/element
菜单/列表 menu/list
源/目标 source/destination/target

(3)要领3:函数取名最忌讳“名不副实”

举个例子,有个函数判断是否存在key:

bool IsExist(string key)
{if(存在){Delete(key);return true;}else{return false;}
}

上面这个函数从函数字面意思看是判断key是否存在,但是!!它居然在函数中隐藏了一段特殊逻辑:如果存在则删除key。这个就是典型的“名不副实”。这个是最忌讳的!会给后续的开发人员留下“巨坑”!!

有两种方式去优化这段代码:

1)将隐藏的逻辑去掉:

bool IsExist(string key)
{if(存在){return true;}else{return false;}
}

2)改变函数名字

bool DeleteIfExist(string key)
{if(存在){Delete(key);return true;}else{return false;}
}

(4)要领4:多查询条件的函数名字谨慎使用介词by

我们平时在写查询接口时,假如有多个查询参数怎么办?每个通过by一起连接依赖?No!这绝对不是明智的方式。假如一开始产品的需求是通过学生姓名查询学生信息,写出来的可能是这样的函数:

List<Student> GetByName(string name);

然后有一天产品提出了新的需求,希望同时可以通过姓名和电话号码来查询学生信息,那么函数可能变成这样了:

List<Student> GetByNameAndMobile(string name, string mobile);

接着可能又会变成这样:

List<Student> GetByNameAndMobileAndAge(string name, string mobile, int age);

如果这样给函数命名,那么你的噩梦大门即将打开。

通常比较好的做法是

1)如果是通过主键id来查询,那么可以通过by 来连接查询信息,

Student GetByStudentId(long studentId);

2)如果是通过其他属性来查询,并且未来会存在多个组合查询的可能性,建议进行封装,比如

List<Student> GetStudent(StudentSearchParam searchParam);

给函数取一个“好”名字相关推荐

  1. 做好APP推广的关键,给自己的APP取一个好名字Yopai.com

    每一个做APP产品和运营的伙伴们都知道,一个好名字对于自己的旗下的APP产品推广是有多重要,既要保证叫起来响亮,有新意,又要保证贴切内容,让大伙一听就知道,这是你们家的APP.和给小孩取名字一样,真是 ...

  2. 怎样给孩子取一个好名字?搜狗“有名堂”大数据支招

    http://pinyin.sogou.com/youmingtang/ 在中国文化里,起名字是一件非常讲究的事情.给孩子起名字,既要考虑文字本身的涵义,又要读起来朗朗上口.那么,到底怎样才能给孩子取 ...

  3. 【转】给Java包取一个独一无二的名字

    来源:http://bbs.hackline.net/thread-3620-1-1.html 隐藏具体实现是Java语言的主要特点之一.正是因为这个原因,所以Java语言的移植性就特别好.如有个程序 ...

  4. 教你如何给孩子取一个好名字!

    古语有云:"赐子千金,不如教子一艺:教子一艺,不如赐子好名."可谓道出了姓名对人的重要性.那么,作为父母如何给孩子起一个大富大贵.提升运势的名字呢? 首先,须以孩子的生辰八字取用神 ...

  5. 独立产品灵感周刊 DecoHack #028 - 如何给你的项目取一个好名字

    本周刊记录有趣好玩的独立产品设计开发相关内容,每周发布,感兴趣的伙伴可以 点击订阅我的周刊.为保证每期都能收到,建议邮件订阅.欢迎通过 Twitter 私信推荐或投稿. 产品推荐 1. Napkin ...

  6. 为了取一个花名,我爬下了中草药网所有的名字!

    很酷哦! 不过,对我这个选择恐惧症来说,也很纠结- 我们先看一下有哪些要求吧? 中草药名?人参?西洋参?还有啥??? 作为一个不怎么吃药的非医学生,这题真的超纲了呀.我只能求助度娘. 但是有个问题,我 ...

  7. 转载--给函数取个好名

    ​​​​​​​工程实践:给函数取一个"好"的名字 - Matrix海子 - 博客园 (cnblogs.com) 我发现,我给函数起名简直就是一个老大难的问题,并不是不知道这个函数是 ...

  8. 给函数和变量取一个有意义的名字

    为什么要给函数和变量取一个有意义的名字? 1. 代码写出来是给以后的自己和别人看的,易于理解的变量名可以更好的阅读,并且可以看出编码者的个人修养和编程功底: 2. 好的变量名字有利于提高自己英语水平( ...

  9. 工程实践:如何给变量取一个好的名字

    工程实践:如何给变量取一个好的名字 在上一篇文章中跟大家分享了关于函数命名的一些实践心得,今天我们继续命名这个话题,来讲一讲如何对变量命名. 以下是本文的目录大纲: 一. 变量命名风格 二. 变量命名 ...

最新文章

  1. JNI命令行下编译错误解决方案
  2. python映射类型-Python 映射类型字典dict操作定义
  3. 君士坦丁堡分叉引起的安全问题
  4. Android 安全专项-Xposed 劫持用户名密码实践
  5. Java提高班(六)反射和动态代理(JDK Proxy和Cglib)
  6. Maven-Dependency Mechanism
  7. 使用Aspose.Cells组件生成Excel文件实例
  8. php 实现百度坐标转换,PHP中腾讯与百度进行坐标转换
  9. little tricks(持续更新)【python】
  10. Network POJ-3694
  11. mysql nhibernate_C#连接Mysql数据库NHibernate
  12. webRTC:jssip登录freeswitch的正确办法及代码
  13. Zynq AXI总线
  14. 77. 组合 - 递归
  15. HelixQAC(QAC/QAC++)静态测试工具-软件代码安全漏洞检测工具试用
  16. uni-app,H5抽奖
  17. 深入探访支付宝双11十年路,技术凿穿焦虑与想象极限
  18. 生理自我、社会自我、心理自我的提出者,是詹姆斯还是奥尔波特?|小白心理-312/347考研答疑
  19. 使用css样式做出亚克力背景和透明背景
  20. Illumina测序原理

热门文章

  1. Undertow文件上传10M以上抛异常UT000020: Connection terminated as request was larger than 10485760
  2. 转:乱谈Dotnet之武林秘籍
  3. Java网络编程socket基础学习
  4. 2019年 8月9日 日报
  5. Fresco高斯模糊使用
  6. 减少2021年度汇算清缴补税
  7. 公历(阳历)转农历(阴历)接口
  8. 京东首页html+css1.0
  9. 视频批量剪辑:如何给视频添加特效,比如:色彩变幻效果特效,怎么制作?
  10. 7、JSON数据和Java对象的相互转换(客户端和服务器对象数据通讯用)