柚子生活

www.pomelolive.com

关于if条件判断的思考

前言

前两天在跟同事争论一个有关缓存的问题,目的就是通过缓存,使得获取对象的速度更快,由于两个人的思路不一样。这里记录一下。首先我讲一下我同事的思路。

我同事的思路

他的思路是这样的,首先从缓存里面获取,如果获取不到,则从本地获取,然后放入缓存,最后再从缓存里面取出来返回。他的思路大概是我先保证缓存里面有东西,然后再从缓存里面取出来返回。以下是代码

private static final Map<Integer, Object> cacheData = new HashMap<>();
public Object getData(int id) {
    Object o = cacheData.get(id);
    if (o == null) {
        o = new Object(); // 从本地加载
        cacheData.put(id, o);
    }
    return cacheData.get(id);
}

他强调的是,既然缓存没有就想办法让缓存有,是一个整体的思想,是一个黑盒子的思想。

我的思路跟他的思路不一样,下面我讲一下我的思路。

我的思路

首先从缓存里面获取,如果获取到了,直接返回。如果获取不到,则从本地获取,然后放入缓存,然后再返回。以下是代码

private static final Map<Integer, Object> cacheData = new HashMap<>();
public Object getData(int id) {
    Object o = cacheData.get(id);
    if (o != null) {
        return o;
    }
    o = new Object(); // 从本地加载
    cacheData.put(id, o);
    return o;
}

我强调的是,分步的思想,分两步走,一、缓存里面有就返回;二、缓存里面没有,就本地加载放入缓存再返回。

两种思路对比

咋一看,感觉我的写法比较复杂,有两个return语句,代码也多了一行。

但是认真思考,这两种思路是有本质区别的,同事思路是黑盒子思想,给我的感觉就是耦合度高,像面条一样,程序设计是先条件分开,然后再汇合。

而我这种写法有点像剥洋葱一样,一个if语句就是一层,耦合度低,分两步走,程序线性执行,没有分支。

这边确实看不出来有啥区别,因为代码太少了,当有五六个条件判断语句的时候,优势就很明显。

发表评论:

Powered By Z-BlogPHP

© CopyRight 2019-2020 pomelolive.com, 京ICP备19052672号