凯迪社区,JAVA学习:怎样给函数取一个“合理”的姓名,扫地机器人

早在2013年,国外有个程序员做了一个有意思的投票计算,该投票是让程序员从以下几个选项中选出平常在工作中自己以为最难做的工作:

  1. 做项目方案规划
  2. 编写测试用例
  3. 编撰规划文档
  4. 向他人解说咱们在做什么工作
  5. 完成你不认同的feature
  6. 在他人写的代码基础上做改造凯迪社区,JAVA学习:怎样给函数取一个“合理”的名字,扫地机器人
  7. 与人交流
  8. 给函数、变量命名
  9. 进行工作量估时

或许在咱们的印象中,编撰规划文档在他人写的代码基础上做改造应该是最难的工作。可是终究的投票成果确让咱们意想不到,这次投票一同有4522名程序员参加了投票,排在第一位的是给函数、变量命名:



大约一半的人投票给了给函数、变量命名,从这次投票成果咱们足能够看出:给函数、变量命名虽然是一件再一般不过的工作,可是要想把这件事做好绝非易事。那么今日,咱们就来聊一聊怎么给函数取一个好的名字。


一. 常见函数命名风格

现在来说,最常见的函数命名主要有两种风格:驼峰命名和帕斯卡命名。

  • 驼峰命名:多个单词组成一个称号时,第一个单词悉数小写,后边单词首字母大写;如:

public void setUserNa翕me(String userName);
  • 帕斯卡命名:多个单词组成一个称号时,每个单词的首字母大写;

public void SetUserName(String userNd5542ame);

两种命名风格都是ok的,但要确保一点,关于一个团队或许一个项目,需求依据言语自身的引荐命名方法做好约好。比方java一般都采纳驼峰命名,C#采纳帕斯卡命名。


二. 函数命名最高境地

咱们一般说:全国武功,唯快不破。那么关于函数命名来说最高境地是什么呢?我以为是:见字如面,望文生义,便是看到函数的名字就知道这个函数详细做了哪些工作。

比方上面的函数:


public void setUserName(String userName);

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


public String addCharacter凯迪社区,JAVA学习:怎样给函数取一个“合理”的名字,扫地机器人(String originString, char ch);

这个函数,一咋看,还不错,从函数字面意思看是给某个字符串添加一个字符。可是到底是在原有字符串首部添加,仍是在原有字符串结尾追加呢?亦或是在某龙应台老二子菲利普个固定方位刺进呢?从函数名字彻底看不出来这个函数的真实目的,只能持续往下读这个函数的详细完成才知道。


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


public String appendCharacter(String originString, char ch); // 追加到结尾
public String insertCharacter(String originString, char ch, int insertPosition); // 刺进指定方位


三. 函数命名最佳实践

1)方法1:动词选取要精准

一般来说,动词决议了一个函数要采纳什么"动作"。动词取的好,一个函数名字现已成功了80%。

常用动词表:

类别

单词

添加/刺进/创立/初始化/加载

add、append、insert、create、initialize、l数鸭歌oad

删去/毁掉

delete、remove、destroy、drop

翻开/开端/发动

open草房子主要内容、start

封闭/中止

close、stop

获取/读取/查找/查询

get、fetch、acquire、read、s正阳门earch、find、query

设置/重置/放入/写入/开释/改写

set、reset、put、write、release、refresh

发送/推送

send、push

接纳/拉取

receive、pull

提交/吊销/撤销

submit、cancel

搜集/收集/选取/挑选

collect、pick、select

提取/解析

sub、extract、parse

编码/解码

encode、decode

填充/打包/紧缩

fill、pack、compress

清空/拆包/解压

flush、clear、unpack、decompress

添加/削减

increase、decrease、reduce

分隔/拼接

split、join、concat

过滤/校验/检测

filter、valid、check

2)要凯迪社区,JAVA学习:怎样给函数取一个“合理”的名字,扫地机器人领2:名词运用范畴词汇

动词决议了函数的详细动作,而名词决议了函数详细的操作方针,关于名词,尽量运用范畴词汇,不要运用冷僻或许咱们很少运用的词语。

举个比方:调集的容量一般用capacit凯迪社区,JAVA学习:怎样给函数取一个“合理”的名字,扫地机器人y、调集实践元素个数用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、li凯迪社区,JAVA学习:怎样给函数取一个“合理”的名字,扫地机器人st

源/方针

source、destination、target

3)凯迪社区,JAVA学习:怎样给函数取一个“合理”的名字,扫地机器人方法3:函数取名最忌讳"名不虚传"

函数取名最忌讳的是"名不虚传",举个比方,假设有个Cache类,里边有个函数判别key是否过期:


p朴延美ublic boolean isExpired(String key) {
//大清贞妃传 当时时刻戳
long curTimestamp = DateUtils.nowUnixTime();
// 获取key的存入时刻戳
long storeTimestamp = getStoreTimestamp(key);

if (curTimestamp - storeTimestamp > MAX_EXPIRE_SECONDS) {
// 留意这个当地的delete是个躲藏逻辑
delete(key);
return true;
}
return 纹身图片fal继父韩漫se;
}

上面这个函数从函数字面意思看是判别key是否过期,可是!!它居然在函数里边躲藏了一段特别逻辑:假设过期则删去掉key。这个便是典型的"名不虚传",这个是最忌讳的,会给后续的开发人员留下"巨坑"。

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

  • 方法一:将躲藏逻辑去掉

public boolean isExpired(String key) 哈宝530{
// 当时时刻戳
long curTimestamp = DateUtils.nowUnixTime();
// 获取key的存入时刻戳
long storeTimestamp = getStoreTimestamp(key);

if (curTimestamp - storeTimestamp > MAX_EX广州银行PIRE_SECONDS) {
return true;
}
return false;
}
  • 方法二:改动函数名字

public int deleteIfExpired(String key) {
// 当时时刻戳
long curTimestamp = DateUtils.nowUnixTime()婊子;
// 获取key的存入时刻戳
long storeTimestamp = getStoreTimestamp(key);

if (curTimestamp - storeTimestamp > MAX_EXPIRE_SECONDS) {
豪门小老婆return delete(key);
}
return 0;
}

4)方法4:多查询条件的函数名字慎重运用介词by

咱们平常在写查询接口时,假设有多个查询参数怎么办?每个经过by一同衔接依靠?No!这肯定不是正确的方法。假设一开端产品的需求是经过学生名字查询学生信息,写出来的或许是这样的函数:


public List getByName(String name);

然后忽然又有一天产品提出了新的需求,期望一起能够经过名字和电话号码来查询学生信息,那么函数或许变成这样了:


public List getByNameAndMobile(String name, String mobile);

接着fight,没过多久,产心境欠好品又期望依据学生年纪来查询学生信息,那么函数或许变成这样了:


public List getByNameAndMobileAndAge(String name, String mobile, int age);

假设这样来给函数命名,那么你的噩梦大门行将翻开。

一般比较好的做法是:

  • 假设是经过主键id来查询,那市侩么能够经过by来衔接查询信息,比方:

public Student getByStudentId(long studentId);
  • 假设是经过其他特点来查询,而且未来会存在多个组合查询的或许性,主张进行封装,比方:

public Lis花菜怎么做好吃t getStudents(StudentSearchParam searchParam);


最终,主张咱们平常在写代码过程中,不要怕在函数命名上消耗时刻,一个好的函数命焰火名在后期会大大削减你代码重构的本钱,争夺对函数命名做到"见字如面"。凯迪社区,JAVA学习:怎样给函数取一个“合理”的名字,扫地机器人

今日的文章就共享到这儿啦,喜爱编程的小伙伴能够重视我哦!有学习方面的问题能够私信回复:学习!