继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

写给所有程序员_起个好名字是成功的一半

慕容森
关注TA
已关注
手记 358
粉丝 183
获赞 649

时隔我做程序员两年了,现在才意识到为文件,为变量,为函数起个好名字的重要,我倍感惭愧,但又为现在意识到这点感到幸运。

1.没意义的名字
例子:

int a = 1;
int b = 2;
int c = a + b;
System.out.println("c="+c);

这段代码很简单,输出两个数的和,但有个问题,你能看到c就知道是两数和吗?如果我们的代码足够多,当每次看到a,b,c的时候,我们都要尝试用逻辑去解析这段代码,这造成时间的大量浪费,因为这个名字除了区别不同变量外,没有带给我们任何有用的消息。

2.让人误解的名字

int apple = 1;
int banana = 2;
int orange = apple  + banana;
System.out.println("orange ="+orange);

这段代码包含着逻辑炸弹,因为名称存在意义,我们往往会在意名称的含义。第一眼看到以为是要输出橘子的有关系,但发现竟然不是,然后又要从头看起。apple是啥?banana是啥?他们两个相加有什么意义?如果这样的代码足够多,我保证一定比a,b,c更让人抓狂。

让人误解的名字往往让人先想含义,发现不正确又要从头看起。

3.数字命名

int a1 = 1;
int a2 = 2;
int a3 = 3;
int a4 = a1 + a2 ;
System.out.println("a4 ="+a4 );

数字命名导致我不得不去查看与之相关的名字。既然都以a开头,又用编号区分,我打赌他们之间一定存在某些关系。不行,一定不能写错,我要看看它的几个兄弟是什么意思。。。每次看到这种代码的时候我难免这样想,不得不去看看它的“兄弟”是干嘛的,甚至有的时候会应为粗心,而写错。比如上面的a4 = a1+a2;
我写成a1+a3,这真的很难一眼看出来。

数字命名导致阅读者要查看兄弟名称,容易书写错误且不容易检查。

4.大家来找茬

int naturalFirstNum = 1;
int naturalSecondNum = 2;
int naturalSumNum = naturalFirstNum + naturalSecondNum;
System.out.println("naturalSumNum  ="+naturalSumNum );

如果有相似的名字,请把它们不同的部分写在开头,其次是结尾,不要把这部分放在中间,这会增大错误率,容易书写错误且不容易检查。

看到上面三个数的不同之处了吗?它们开头结尾都相同,但是中间不同,这样真的很容易弄错,如果你不得不这样写,请将naturalFirstNum 改为firstNaturalNum,naturalSecondNum改为secondNaturalNum 同理修改naturalSumNum;如果命名规则要求固定开头(类似btnServiceCommit,前面几个字母表示控件),那就让它们的结尾不同naturalNumFirst.

5.不要加和类型相同的名字,这会给你的查找替换工作加大难度

List<Integer> list = new ArrayList<>();

这个名字有两个槽点:1.你搜索list的时候会把List也搜索出来,如果我全局替换名称,会造成大面积的错误,因为我把List也替换了。2.没意义,因为一旦我赋值错误了,强类型语言IDE会提醒,看到这个名字我也不知道它的作用是什么。
这种情况通常发生在自定义的类,比如:

Apple apple = new Apple();

聪明的程序员往往会这样写:

Apple mApple = new Apple();

mApple比apple这个名字好,因为它让IDE的查找替换工作更加容易

好的名字

int firstNum = 1;
int secondNum = 2;
int sumNum = firstNum + secondNum;
System.out.println("sumNum ="+sumNum );

注意到了吗?我用firstNum来代替num1,这样识别度会增强,firstNum和secondNum不像num1和num2这样容易弄错。因为是变量名所以采用名词,不要写成动词firstAdd,这容易让人眩晕,1+?这是什么?用动词不能完整的表达变量名的意思。

同样的,函数名(方法名)要使用动词+名词

public static void main(String []args){
    int firstNum = 1;
    int secondNum = 2;
    System.out.println("sumNum ="+addTwoNums(firstNum,secondNum ));
}

public static int addTwoNums(int firstNum,int secondNum){
    return firstNum + secondNum;
}

上面的名称:addTwoNums就是动词+名词格式,不用看代码单独看名字,就知道这个函数(方法)是求两数和的,这就是这种命名方式的好处。单用动词add,绝对不会马上知道这个具体的工作。是添加到数据库?添加到列表?还是求和?要有个识别的过程,这个过程,我称之为浪费时间的过程。

特殊:按钮或超链接类控件命名

虽然也算变量名,通常表示一个动作,如:
提交数据,比如修改手机号,比如登录
所以使用动词或动名词形式:
btnCommit,btnModifyPhoneNumber

原文出处

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP