欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

重构-如何编写一段好的代码

程序员文章站 2022-05-31 09:29:02
...

关于重构,很多人可能都有惨痛的经验,
就不说去阅读别人的代码了,
有时候自己写的代码过半年,可能自己都看不明白,
这时候再来重构代码是一件很痛苦的事情。

其实很多时候面试时会聊到重构的问题,
我自己的看法是重构是软件开发中不可缺少的一个环节,
并不是说需要重构的代码都是坏代码,
有时候是旧的代码架构不能适应新的需求,
而有时候是为了新技术的使用。

今天来说一下在代码重构中的一个技巧,
如何编写一段好的代码。
其实不止是重构,在平时开发中如果可以的话也尽量用下面这种方式写代码。

一段糟糕的代码是怎样的
举个例子,
在代码中需要启动某个组件,而启动组件可以带启动模式作为参数,
一般开发都会这么写这个接口方法

public void startComponent(boolean arg);

这接口可以运行,
但是它是糟糕的。
因为 arg 这个名称并不能描述参数的作用,
不夸张的说两个星期后自己都看不懂这段代码。
开始重构它
我们假设启动模式有两种,内部启动和外部启动,那么从这个角度出发可以把参数修改为这样
public void startComponent(boolean fromOutside);
看起来好些了,这样我们在调用的时候就知道 tru是表示外部启动,而 false是内部启动

//call from Outside
startComponent(true);

//call from inside
startComponent(false);
但是这样仍然是一段糟糕的代码…

进一步重构
可能你听说过这么个段子,
优秀的程序员在写代码时能迅速的将自己变成*,
印象中好像是说 Pony Ma 的…

如果是一个*程序员看这段代码有什么问题呢?
在没看到参数的名字之前,单看调用处是不知道 true 和 false是表达什么目标的。

不好理解么?
假设有一个新方法是启动一个模块,这里是它的调用

startModule(true);
对于使用者来说,你猜这参数是什么意思?

那么如何进一步重构呢。

这里可以使用 Enum的技巧,
来看一下使用 Enum 如何写一段阅读性良好的代码。
public enum LaunchType {
OUTSIDE,
INSIDE
}

//interface
public void startComponent(LaunchType type);
虽然看起来代码量变多了,不过我们来看下调用的地方变成怎样,

//call from outside
startComponent(LaunchType.OUTSIDE);

//call from inside
startComponent(LaunchType.INSIDE);
是不是变的一目了然。

这种写法还有另外的好处,
如果将来需要扩展启动模式,也不需要修改接口,
只需要在枚举类中增加对应的类型就可以。
总结
重构其实是在于代码的细节,
在提高代码架构的健壮性的时候也不要忘了提高代码的可阅读性。

在代码编写中有这么个格言,
如果代码写得好可以自述其身,
谁还需要注释?