养成从一而终的代码习惯!
养成从一而终的代码习惯!
养成从一而终的代码习惯!
不管你是使用哪种语言开发项目,必须形成一个贯彻到底的代码习惯,这一点非常重要!无论使用哪钟命名方法或者命名习惯,保持整体的一致性非常重要。 例如,我们编程之中进行需要将String类型的对象转换为Date类型的对象,命名方法的时候可以使用convert和switch这两个单词作为前缀,具体使用哪一个取决的个人的喜好,但是如果保持一个相同的命名风格,其他开发人员遇到类似前缀的方法时,能够很快得反应出来这是一个数据类型转换的方法,而不是查阅相关的doc文档。
实际开发中坚决不允许使用汉语拼音命名,如果实在找不到一个合适的命名,暂时使用含义想进的单词代替。假如你在编程之中使用grxx来命名一个PersonInfo类的实例,其他开发人员看到这里时肯定不止所云,往往需要定位到变量声明的地方一探究竟,这种做法无疑极大造成极大的时间浪费,相反如果你使用personInfo去命名这个实例,那么其他开发人员能够直接映射出对应变量的含义。为了避免使用汉语拼音命名一个变量,我们需要丰富自己的变量名称库,平时可以多去开源项目看看,掌握一些编程人员约定俗成的名称。(ps:如果项目开发使用使用汉语拼音命名变量,估计部门老大会喷死你)
变量的命名应该和其实际的含义相符合,不能随便选取一些似是而非或者简单方便的名称。String类的substring就是一个很好的例子:
public String substring(int beginIndex, int endIndex) { if (beginIndex < 0) { throw new StringIndexOutOfBoundsException(beginIndex); } if (endIndex > value.length) { throw new StringIndexOutOfBoundsException(endIndex); } int subLen = endIndex - beginIndex; if (subLen < 0) { throw new StringIndexOutOfBoundsException(subLen); } return ((beginIndex == 0) && (endIndex == value.length)) ? this : new String(value, beginIndex, subLen); }其方法参数使用beginIndex和endIndex告诉调用者需要传入两个下标即可,第一个表示开始,第二个表示结束。刚刚入门的小白可能会用index1和index2这样的方法参数,调用者除了知道这两个参数表示下标之外,其余信息一无所知,因此使用者需要找到方法定义的地方,不得不仔细阅读源码,确保自己不会因为参数传递而导致错误,无疑增加了额外的开发成本。
编程中经常有人喜欢使用类名称、特例名称或者专有名称做变量命名的前缀。变量名称不仅又臭又长,而且对于开发人员阅读代码毫无益处,你能告诉我employeeSourceAddress和address有什么根本性的区别吗?除非整个方法中存在多个employee的地址,否则并不能提供更多的信息,相反你的变量名称还会变的冗余起来。
一些约定成俗的变量名称应该遵循其含义,不能为了开发方便而使用不为常知的一面,从而导致阅读障碍。编程之中List和Set特指某个对象属于对应的数据类型,如果你使用employeeList或者employeeSet表示一个员工组,但是其他开发人员可能认为这是一个List或者Set类型的employee对象,将会导致一些不正确的调用方式。相反如果你使用employeeGroup表示一个员工组,那么其他开发人员并不会产生过多的疑问。禁止使用一些通用的变量名称做不相干的命名用途。
假设名为Day的类有一个add方法,使用如下
lastDays = day.add(5);那么你可能会产生疑问?方法add是day对象本身增加五天返回还是新创建一个Day对象增加五天返回,这个时候我们无疑需要阅读源码一探真相。add命名方法显然产生其他含义,不利于编程者直接将自己的意图表达给其他使用者,因此我们不妨把add方法更名plusDays,歧义瞬间一消而散。实际编程之中,经常存在大量的诸如add、set和get等等的方法,使用者为了找到满足要求的接口往往需要多下一番功夫,当我们使用这些存在歧义的命名时,需要认真思索一番,命名准确表达出来自己的真实目的了吗?有没有存在一个更为切当的名称那?
类名推荐使用名词或名词短语,方法名推荐使用动词或动词短语。
变量应该在其使用的地方声明,便于开发人员定位其含义,如果方法本身比较短小,也可以放在开头声明。私有方法应该紧跟在其调用者之后。
良好的代码习惯才能带来更高的开发效率和工程质量!