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

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

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

  1. 黑马程序员_异常(老毕视频总结及《疯狂java》补充)

    ----------------------<ahref="http://edu.csdn.net"target="blank">ASP.Net+A ...

  2. 不要困在自己建造的盒子里――写给.net程序员

    不要困在自己建造的盒子里――写给.net程序员 2011年02月26日 此文章的主旨是希望过于专注.NET程序员在做好工作.写好.NET程序的同时,能分拨出一点时间接触一下.NET之外的东西(例如10 ...

  3. 黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

    黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合 ...

  4. 徐磊(Devops):一名写了十几年代码但还没写够的程序员

    徐磊(Devops 社区领袖) [个人介绍] 徐磊,微软MVP(微软最有价值专家,大中华区域社区技术总监,Devops 社区领袖),从事过网管.技术支持.网络.软件开发等工作,一名写了十几年代码但还没 ...

  5. 写日历的程序员,你必须弄懂的中国农历算法。

    写日历的程序员,你必须弄懂的中国农历算法. NANSHAN即时通讯,我们知道农历通过置闰月的方式协调农历年和回归年长度不相等的问题,也知道了置闰的方法是"中气置闰"法,那么到底什么 ...

  6. 除了写代码,程序员还能做哪些副业呢?

    作者 | 沉默王二 责编 | 伍杏玲 出品 | 程序人生(ID:coder_life) 许多年轻程序员会单纯地认为:"只要做一名正儿八经的程序员,在技术上深耕细作,在工作上兢兢业业,就一定能 ...

  7. 一月集 一个会写诗的程序员2019

    冬至 ,昼与惆怅最短,夜与思念最长,愿你一切都好. --光剑 任何年龄的爱情都是合情合理的.心灵的爱情在腰部以上,肉体的爱情在腰部往下.任何年龄段的女人,都有她在那个年龄阶段所呈现出来的无法复刻的美. ...

  8. 黑马程序员_石头迷阵小游戏

    黑马程序员_石头迷阵小游戏 源代码 一些说明: 1)这些是我看b站黑马程序员的视频,自己手打的,想分享一下,如果有侵权啥的请联系我,马上删除 2)一些比较重要的我都有给注释 3)工具idea idk版 ...

  9. 二零一九第二天 文/一个会写诗的程序员

    今天是二零一九年 第二天 天气依然阴冷 而我感觉 这新的一年开始 也并没有什么不同 而是,变得更加 凄凉萧条 孤寂寒冷了 "我相信会变,但只是更糟" 一个会写诗的程序员 杭州 20 ...

最新文章

  1. Unix_Linux系统定时器的应用(案例)
  2. apache安装_Ubuntu20.04安装Sql+apache+php
  3. 初学Node(五)文件I/O
  4. 实战分享之专业领域词汇无监督挖掘
  5. pthread_create函数 参数不匹配的问题
  6. 关闭IOS更新功能(ios4/5/6)
  7. 开始gentoo之旅
  8. Python网络爬虫与信息提取 - requests库入门
  9. 2005/2010/2015-2021年全国兴趣点POI数据
  10. win10动态壁纸怎么设置_手机怎么设置动态壁纸-手机壁纸怎么设置动态
  11. 计算机中单位换算tb,bit Byte KB MB GB TB 单位换算
  12. Android Compose 实现渐变背景色
  13. wordpress插件_如何使用适用于WordPress的长格式Storybuilder插件
  14. 广东工业大学计算机专业课程,广东工业大学在职研究生计算机专业课程安排
  15. python 游戏引擎 cocos2d_2.2 完成一个Cocos2d游戏程序代码
  16. DateTrack功能介绍-如何删除终止日期?
  17. 扑克玩法:9点半--数据分析
  18. 机器学习 面试题-第二章 线性模型(大厂必问,历经半年整理)
  19. Redis哨兵Sentinel的搭建和原理说明
  20. 深入理解python.md_深入理解学习Git工作流(git-workflow-tutorial)

热门文章

  1. 几天自学单片机的一些小小心得
  2. Echar 制作图表+查询数据
  3. “低声教育”,才是给孩子最好的礼物
  4. IntelliJ IDEA插件开发入门教程(一)
  5. C语言如何判断回文数
  6. SpringBoot实现第三方QQ登录
  7. 安装西门子博图总是提示重启电脑的解决方法
  8. 国外WEB漏洞扫描系统测评对比详情
  9. dev c++下载和安装
  10. VIA威盛4-IN-1最新驱动 v4.55