代码洁癖系列(三):整洁的类和函数

前面咱们讨论了什么样的命名更可以让你赏心悦目,今天来讨论一下面向对象编程过程当中最重要的环节,编写类和函数。咱们仍然用Java来演示,什么样的类和函数才算是整洁的。java

首先讨论函数,函数定义好了,类也就容易了。编程

短小微信

相信你们在读代码的时候都会遇到过冗长的函数定义。没有的话能够私信我,我把原来写过的一段300+行的函数发给你,不过不要问我这个函数是作什么的,由于我也忘了,并且不想回顾。固然若是你足够耐心研究出来了,请教教我。编辑器

言归正传,为何函数要短小呢,如何才能是本身的函数更加短小?第一个问题我也没法证实,只能告诉你短小的函数看起来更加清晰,更加容易理解。那怎么才能让函数变得更加短小呢?很简单,抽离方法。将一些代码抽离成另外一个函数。什么样的长度才是合适的呢?我认为没必要过于追求短。这里的长度咱们能够以代码块的层来定义,对于下面这种代码相信任何人看了都会崩溃吧。函数


public void doSomething() {
   for() {
       ...
       while() {
           ...
           if() {
               ...
           }else {
               ...
           }
       }
   }
}


因此每一个函数中有一层或两层为最佳,每层代码块最好不超过3行。这是我认为最佳的函数长度,固然,这个也能够根据我的习惯稍做调整。测试


只作一件事flex

若是说长度还能够根据我的习惯,那么“只作一件事”的要求应该是你们都应该遵照的公约了。若是一个函数中作了太多的事,那么代码阅读起来的难度将会成倍增长,并且文档书写难度一样增大。还有就是给其余代码调用形成不便。好比我定义了函数A作了1和2两件事,函数B想作2和3,怎么办?这时B只能再写一遍A中作2的代码。而这样就会有大量重复代码出现,不但增长工做量,对往后的维护工做也形成很大的负担。而把1和2分别定义为函数C和函数D的话,只须要在AB中分别调用就能够了。ui


命名spa

这里很少解释,函数的命名须要具备描述意义,函数越短也就越容易描述。.net


函数参数

参数数量越少越好(这个我目前也没有作到),究其缘由,首先是读代码时每次都要搞清楚每一个参数的意义,因此天然越少越好。另外一方面就是为测试的同事提供方便,若是有多个函数,测试的同窗就须要考虑更多的测试用例对其进行覆盖。若是一个函数有3个以上的参数,那测试的同窗可能想要打人了。


使用异常代替返回错误码

这样就能够将Try/catch代码块抽离出来,由于Try/catch代码块影响了正常程序的流程,看起来很丑陋。


函数的主要规则就是这些,那么如何才能写出这样的函数呢?其实没有什么特别的技巧,就是记住这些规则,在每次写完代码以后再斟酌一番,对代码进行反复的打磨,修改不合适的命名,抽离冗长的函数。长此以往,你的代码必定会被人称赞的。

说完函数再来讲一下如何写好一个类。


仍是短小

没错,类也应该短小,不过这里短小的定义和函数短小的定义稍有不一样,咱们一般以“权责”来衡量。先看下面这个类。


public class SuperDashboard extends JFrame implements MetaDataUser {
   public Component getLastFocusedComponent()
   public void setLastFocused(Component lastFocused)
   public int getMajorVersionNumber()
   public int getMinorVersionNumber()
   public int getBuildNumber()
}


这个类只提供了5个方法,应该不算长,可是我要说,它仍然不知足咱们“短小”的条件,缘由就是违反了单一权责原则。单一权责指的是一个类只描述一类事。上面这个类有对最后焦点组件的读写方法,还有获取版本号和序列号的方法。只要咱们描述一个类时,用到了相似于“还有”这样的字眼时,那么这个类就违反了单一权责原则,就须要对其中的方法进行抽离。

为了修改而组织

大多数系统都会进行持续的迭代,而这也意味着咱们须要不断对代码进行修改。而修改代码每每伴随着风险。因此,咱们须要作的就是,修改一个方法时,不对其余方法形成影响。当咱们开始修改时,就要评估好影响,而后将方法进行抽象,拆分。力求作到每次修改都不影响其余类(即下降耦合)。


对于写好一个类,总结来讲就是“高内聚,低耦合”。想要写好一个类一样须要反复琢磨。没有人一开始就能写出很优雅的代码。最后祝点赞的人写的代码愈来愈优雅把。

END
往期精彩回顾
代码洁癖系列(二):命名的艺术
代码洁癖系列(一):什么是整洁代码

本文分享自微信公众号 - 代码洁癖患者(Jackeyzhe2018)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索