重构是一个程序员很好的编程习惯。有时候难免写出一些不好看的代码,空闲时候你就可以用重构这种方式来提升代码质量。
比如类似这种模式:
if (! pDev->m_IsInited) pDev->Init();
这段代码从性能上来说没有什么问题,意思也很明显,如果“已经初始化”标记为false,则调用Init()这个初始化函数做一些动作。
但是代码实际上可以改进的更好,最大的问题是对于pDev的使用者来说,没有必要知道m_IsInited这个变量。我们可以推出第二版:
if (! pDev->IsInited() ) pDev->Init();
这时候类变量被函数调用替换,好处是你可以在IsInited()函数里面做更多的操作,或者把m_IsInited改个名字而不需要去修改每行类似上面的代码。
当然还有一种更简单的方案:
pDev->Init();
而IsInited()判断则放在Init()里面,这时候pDev的使用者更省事,我只要调用就好了,有没有初始化过,那是pDev自己的责任,跟使用者无关。
需要注意的是,Init()此类函数也许会有输入参数,那时候就需要比较复杂代码来保存状态以免出错。另外这个方式主要用于防止Init反复重入,如果某个函数需要反复调用且每次调用结果可能不同,那就不能使用类似手段了。
这属于非常非常基本但也是很常用的一种重构方式,在这里记录一下。
发表回复