如果你有这些编码习惯,不只是能坑别人,还能坑自己。【有逼格的代码】

      ”细节之中自有天地,整洁成就卓越代码“   选自《代码整洁之道》的副标题;

      “傻瓜都能写出计算机能理解的代码,而好的程序员可以写出让傻瓜能读懂的代码”  选自《重构》



为什么写整洁的代码

      “写这些代码的时候只有我和上帝知道,现在只有上帝知道了!” 编程初期, 甚至编程多年后还是会有很多人有这样的问题!而代码杂乱是造成这些问题的主要原因之一。脏乱的代码也许让你一时很“爽”,但是终究是害人害己。业务变更,逻辑缺陷,bug修复,代码优化……等等原因都会造成代码修改,若时间相隔太长,肯定会忘记当时才思泉涌写下的得意之作,而要迅速的捡起来当时的逻辑,整洁的代码则尤为重要。

       试想一下,如果让你帮同事修改一个功能,而且就需要读别人的代码,若代码一片狼藉,无意义的变量,多层的if嵌套,上百行甚至上千行的方法体,杂乱无章的格式,再加上缺少注释,估计你连杀了对方的心都有了,因此为了程序员的生命安全,整洁代码势在必行。



如果你有下面的习惯,还是早日悔悟,方能天长地久



过长的方法体,无意义的方法名

    首先,过长的代码读起来需要照应的上下文比较多,读取难度比较大。

    第二,过长的代码不能一览无余,上下滚动不利于阅读。

    第三,过长的代码逻辑会更复杂。

    第四,不好意思,jvm仅支持最大8000字节的方法体(当然你不能写够8000字节)

注:早期的编程语言,字程序调用需要额外的开销,但是现在OO语言几乎已经完全免除了这方面的开销,因此几乎不必担心方法过多造成性能问题。

方法编写原则:

  1. 方法体尽量保持在40行以内。 (并不是说超过40行就是大的方法体,只不过40行以内的代码几乎不需要滚动屏幕就能一览无余,方便阅读)。
  2. 一个方法只做一件事。(这样做方法体名字命名更容易,方法更简短,旨意更明确,更容易组织逻辑)
  3. 避免过多的参数。 (参数是有顺序,有类型,因此参数过多会增加方法调用的难度,一般参数超过5个,就建议使用实体)
  4. 方法命名要有意义,并且使用英文或者英文简写命名。 (正确的,好的方法名更容易理解方法的作用,甚至你不需要读取方法体的内容就已经知道方法的作用,大家可以参考lang3下的工具类方法命名)

命名混乱且无意义的变量

       很多人头疼变量命名,使用无意义的字母或者数字进行临时命名;或者害怕变量命名太长,而过度简化变量命名,导致变量命名失去了原有的意义或者让人不能理解;或是使用拼音命名变量(第一:low;第二:有歧义)……

      《重构》中有段话说,好的代码不需要注释,整洁的代码本身就是最好的注释;注释并改变不了坏代码的本质。

       因此正确的命名也许会消耗你部分命名时间,但是可以节省部分注释的时间,只要命名规范,易读,注释并不是必须的。

变量命名原则:

  1. 使用英文或者有意义的英文简写命名。(可能有人限于英文水平,或者避免过长变量,使用拼音命名,但是拼音是有歧义的,这些变量并不易读,注释可以注释当前变量,但是如果下面使用变量,已经不易读)
  2. 使用驼峰式命名。(驼峰命名更易读,可以明确的分割单词,看起来也比桥联式命名更优雅)

多层的IF嵌套

     if嵌套会增加逻辑复杂度,增加阅读难度。并且if嵌套过多,方法大括号也会让人头疼。并且多层if嵌套也会增加代码行数,让代码变得冗长。

可以使用如下方法避免多层的IF嵌套:

  1. 使用逻辑 或、且、非  减少IF的嵌套层数。
  2. 使用三元表达式替换IF。(三元表达式格式更优雅,语法更简单,并且有效减少if else 判断)
  3. 使用卫表达式代替多层IF。(卫表达式格式如下)
  4. 封装合适的方法,封闭IF判断和逻辑。

卫表达式:

        if (ErrorType.HTTP.equal(msg))     return;
        if (ErrorType.DATABASE.equal(msg)) return;
        if (ErrorType.IO.equal(msg))       return;
        if (ErrorType.NO_FILE.equal(msg))  return;

 


多层循环嵌套

     而循环的嵌套更是严重,不仅是增加逻辑难度,也在很大程度增加了代码调试的难度,无论是跟踪断点,还是打印日志,多层的循环嵌套都会加强代码的调试难度。

可以使用如下方法避免多层的循环嵌套:

  1. 封装方法,将一个或多个循环封装到方法内。(方法封装尽量不要再有循环嵌套,并且不建议在方法中封装多个循环)
  2. 将嵌套拆分为平行。(仅仅适用于少数场景,我想使用多层嵌套本身就是无奈,毕竟嵌套的消耗是笛卡尔积的增长)

重复的代码

    重复的代码不仅仅是增加了类或者是方法的长度,并且让修改变得复杂。如果有个需求或者bug需要你修改重复的代码,你要修改多处,并且很容易出错,因为有些地方也许并不需要修改,或者需要修改而没有修改全。

   为了避免以上问题,在编码时就应该必备重复代码,尤其是在同一个对象中。(不在同一个对象中尽量也不要过多重复代码)。

避免重复代码可以遵循以下原则:

  1. 抽离出工具类,或者工具方法,代替重复内容。(很大一部分重复代码都是可以通过工具类来取代的,并且将重复片段抽离出工具类或者工具方法也有利于后期编程,提高编程效率)
  2. 使用方法代替变量。(这种方式能在很大程度上取代重复代码,因为重复代码很多时候是在组装数据)
  3. 抽取共有字段或方法,统一命名。(这个种方式优劣参半,抽离共有字段或者方法能够降低重复代码,同时可能造成过多的全局变量,而全局变量过多,代码就不在易读,亦不符合重构原则)


       时刻注意以上问题,并且在日常编程中时刻保持洁净的代码,一定会为你日后的编程学习,提供十分有利的助力。整洁的代码让自己逻辑更清晰,阅读更方便,再参考一些高级的且流行的写法,相信你一定能形成自己的风格,让人看起来感觉,整洁,明了,舒服的风格。

 

 

                         细节之中自有天地,整洁成就卓越代码

 

----------------------------------------------------------------------------这就是我的底线------------------------------------------------------------------------

以上仅是个人的一下编程经验和看法,

如有 糟糠 忘请各位看官评论区指正,

若侥幸小有 精华 希望对大家有帮助,编程路漫漫,大家勉力而行。

 

 

 

 

 

 

 

 

你可能感兴趣的:(开发记事录)