美文网首页
代码洁癖系列(三):整洁的类和函数

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

作者: Jackeyzhe | 来源:发表于2018-08-31 00:06 被阅读11次

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

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

短小

相信大家在读代码的时候都会遇到过冗长的函数定义。没有的话可以私信我,我把原来写过的一段300+行的函数发给你,不过不要问我这个函数是做什么的,因为我也忘了,而且不想回顾。当然如果你足够耐心研究出来了,请教教我。

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

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

所以每个函数中有一层或两层为最佳,每层代码块最好不超过3行。这是我认为最佳的函数长度,当然,这个也可以根据个人习惯稍作调整。

只做一件事

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

命名

这里不多解释,函数的命名需要具有描述意义,函数越短也就越容易描述。

函数参数

参数数量越少越好(这个我目前也没有做到),究其原因,首先是读代码时每次都要搞清楚每个参数的意义,所以自然越少越好。另一方面就是为测试的同事提供方便,如果有多个函数,测试的同学就需要考虑更多的测试用例对其进行覆盖。如果一个函数有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个方法,应该不算长,但是我要说,它仍然不满足我们“短小”的条件,原因就是违反了单一权责原则。单一权责指的是一个类只描述一类事。上面这个类有对最后焦点组件的读写方法,还有获取版本号和序列号的方法。只要我们描述一个类时,用到了类似于“还有”这样的字眼时,那么这个类就违反了单一权责原则,就需要对其中的方法进行抽离。

为了修改而组织

大多数系统都会进行持续的迭代,而这也意味着我们需要不断对代码进行修改。而修改代码往往伴随着风险。所以,我们需要做的就是,修改一个方法时,不对其他方法造成影响。当我们开始修改时,就要评估好影响,然后将方法进行抽象,拆分。力求做到每次修改都不影响其他类(即降低耦合)。

对于写好一个类,总结来说就是“高内聚,低耦合”。

欢迎关注我的个人公众号:代码洁癖患者


wechat-qcode.jpg

相关文章

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

    前面我们讨论了什么样的命名更能够让你赏心悦目,今天来讨论一下面向对象编程过程中最重要的环节,编写类和函数。我们仍然...

  • 代码洁癖系列(一):什么是整洁代码

    作为一个代码洁癖患者,我最大的愿望就是世界和平……对不起,拿错剧本了,最大的愿望就是将对代码的洁癖传播给每一个人,...

  • 简洁代码--命名

    代码整洁之道笔记 [TOC] 命名 代码的整洁,从命名开始 名副其实、准确 名称应该能够说明该(变量、类、函数)存...

  • 代码整洁之道笔记

    1.什么是整洁代码 整洁的代码力求集中:每个函数、每个类和每个模块都全神贯注于一事。它应当有单元测试和验收测试。它...

  • 《代码整洁之道》读书笔记(六)之写好类

    代码语句和函数的整洁是一个比较底层的介绍,下面将介绍比之更高层级的类的整洁。 1. 类的组织 遵循标准的Java约...

  • 干净整洁、井井有条,到底有什么好?

    我这个人吧,有点“整洁癖”,没错,不是“洁癖”,是“整洁癖”。为什么这样说呢? 首先,我还是很爱干净的,轻微洁癖。...

  • 代码整洁笔记——整洁代码的函数书写准则

    1.0整洁代码的函数书写准则 1.1短小 函数的第一规则是要短小。第二规则还是要短小。 《代码整洁之道》一书作者B...

  • 代码整洁之道 - 函数

    快速指南 以下是文中关于写好函数的几个关键点 短小 只做一件事 每个函数一个抽象层级 使用描述性的名称 函数参数,...

  • 代码整洁之道-<函数>

    代码整洁之道-<函数> 代码整洁之道 一书相关读书笔记,整洁的代码是自解释的,阅读代码应该如同阅读一篇优秀的文章,...

  • angular

    1.angular 基本概念 类库( 提供类方法 ) 和框架类库提供一系列的函数和方法的合集,能够加快你写代码的速...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/ibyjwftx.html