金拱门戳中笑点?程序员告诉你 起个好名字是成功的一半

百家 作者:程序人生 2017-10-27 04:29:15

从昨天到今天,金拱门强势霸屏一切社交软件

于是各个知名账号都被恶搞

眼看着微信搜索指数

“麦当劳”、“金拱门”也都呈直线上升的趋势

然而肯德基的指数。。。(好意外)



麦当劳官微都忍不住发微博说:

刷了24小时,你们知道这些吗?



官微解释了啥?

说到底为啥要改名?

其实在国外,麦当劳金拱门-Golden Arches 的身份早就被坐实..



手指随便一划都是金拱门的形状... ...


BBC曾经就发文表示:“这个世界上最有名的拱门莫过于既没有巧思工匠也没有磅礴历史底蕴的麦当劳。


他们认真地表示:“金拱门背后的故事相当不一般


首先这个金灿灿的Logo造型的确像…拱门

而且人家的功能,本来也就是拱门!



早在1953年,麦当劳就已经采用这种设计了...



在现在看起来简单,但在当时极具时髦、科技爆炸感。



据说一开始大家都不同意...


毕竟,起初顶部两个 15 美分标志看起来也蛮好的。而且对于宣传 1 个汉堡的超低价格也是非常诱人..



最后还是多亏了后来麦当劳的 CEO:Ray Kroc 这个高瞻远瞩的男人..



他坚信金灿灿的拱门耸入天际,才能使饿肚子的赶路人一眼识别。



于是...越来越高的金拱门,插在高速公路以及加油站休息站的入口。越来越高,越立越大..



通过麦当劳改名事件,意识到为文件,为变量,为函数起个好名字的重要,同时又为现在意识到这点感到幸运。我们一起来看下:


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 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


不说了

咱们中午也相约去趟


金拱门?

(总觉得金拱门应该给我们广告费)


更多精彩

老公月入五万的程序员夫人70后程序员的启示程序员提升外观王小波程序员我会编程七夕表白程序员最高殊荣程序猿(媛)CP祭天Python歌词特斯拉程序媛直播鄙视链敲代码404结婚Facebook怎么进BAT女友日记高逼格指南计算机专业技能干货编程习惯陆奇演讲自救指南周鸿祎谈创业




关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接