作为开发人员,应该让重构贯穿于你的开发日常的每一刻。
为什么这么说?
重构是为了改善软件的设计、结构和实现,同时保留其现有的功能。 重构的潜在优势包括提高代码的可读性和降低复杂度。 这些都可以提高源代码的可维护性,并创建一个更简单、更干净或更有表现力的内部架构或对象模型,从而提高程序的可扩展性。
原因我觉得有两方便,一个是客观的因素,随着技术的不断更新迭代,语言的特性也在更新(朝着更高效便捷的方向)。另一个则是人为因素,不同的人由于开发水平的不同写出来的代码也各尽不同。
在一个团队中你除了要写自己的代码,而且还要接手别人的代码,作为一个leader更要去给别人做code review。
所以,重构是如此的必要,而且悄无声息。
举个例子,最近在看到一段代码后,立刻让我产生重构的冲动。
旧代码如下:
首先定义两个常量,对象和数组
const data = { Angular: 3, React: 1, Vue: 2, Next: 1, HTML: 2, Other: 3 }; const colors = [ '#d17a29', '#da9554', '#e3af7f', '#edcaa9', '#f6e4d4', '#204e77' ];
利用for操作,取出以上对象的key和value和数组元素组成新的数组
let sortable = []; let index = 0; for (let temp in data) { sortable.push([temp, data[temp], colors[index] ? colors[index] : '#D3D3D3']); index++; } sortable.sort(function(a, b) { return b[1] - a[1]; });
最终输出结果:
[ ['Angular', 3, '#d17a29'], ['Other', 3, '#204e77'], ['Vue', 2, '#e3af7f'], ['HTML', 2, '#f6e4d4'], ['React', 1, '#da9554'], ['Next', 1, '#edcaa9'] ]
从逻辑实现上没有任何问题。但总感觉哪里不对,是不是有更高效的实现方式呢?
重构后的代码
也许是写代码的惯性使然,立马想到使用Map
方法可以将数据返回你想要的格式。
但是对象数据格式好像不支持Map方法。
所以我们得先将对象转化成数组
const newOutput = Object.entries(data);
我们将得到以下格式的数组
[ ['Angular', 3], ['React', 1], ['Vue', 2], ['Next', 1], ['HTML', 2], ['Other', 3] ]
是不是和最终想要的结果有点类似了,数组的元素中还差了一个color
的值,以及最终需要将它们排序。
接着我们根据索引将color
的值添加到以上输出结果中
const newOutput = Object.entries(data) .map( ([title, amount], index) => [ title, amount, colors[index] || "#fff"] );
这里或者使用数组解构更容易理解一点
const newOutput = Object.entries(data) .map((item, index) => [ ...item, colors[index] || '#fff'] ) .sort((a, b) => b[1] - a[1]);
在取不到值的时候我们给添加了一个默认的颜色值
[ ['Angular', 3, '#d17a29'], ['React', 1, '#da9554'], ['Vue', 2, '#e3af7f'], ['Next', 1, '#edcaa9'], ['HTML', 2, '#f6e4d4'], ['Other', 3, '#204e77'] ]
最后只剩下一步,我们需要按第二项给数组排序,很容易就想到用sort
方法
const newOutput = Object.entries(data) .map( ([title, amount], index) => [ title, amount, colors[index] || "#fff"] ) .sort((a, b) => b[1] - a[1])
以上代码输出:
[ ['Angular', 3, '#d17a29'], ['Other', 3, '#204e77'], ['Vue', 2, '#e3af7f'], ['HTML', 2, '#f6e4d4'], ['React', 1, '#da9554'], ['Next', 1, '#edcaa9'] ]
没有问题,两种不同的代码都得到了最终的结果。但是重构后的代码量明显比之前的少了很多,而且结构更严谨。
写代码的过程中要学会举一反三,及时拥抱语言的新特性能给我们带来更好的编程体验。