美文网首页
日常开发之重构

日常开发之重构

作者: 编程范儿 | 来源:发表于2021-02-03 11:27 被阅读0次

作为开发人员,应该让重构贯穿于你的开发日常的每一刻。

为什么这么说?

重构是为了改善软件的设计、结构和实现,同时保留其现有的功能。 重构的潜在优势包括提高代码的可读性和降低复杂度。 这些都可以提高源代码的可维护性,并创建一个更简单、更干净或更有表现力的内部架构或对象模型,从而提高程序的可扩展性。

原因我觉得有两方便,一个是客观的因素,随着技术的不断更新迭代,语言的特性也在更新(朝着更高效便捷的方向)。另一个则是人为因素,不同的人由于开发水平的不同写出来的代码也各尽不同。

在一个团队中你除了要写自己的代码,而且还要接手别人的代码,作为一个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']
]

没有问题,两种不同的代码都得到了最终的结果。但是重构后的代码量明显比之前的少了很多,而且结构更严谨。

写代码的过程中要学会举一反三,及时拥抱语言的新特性能给我们带来更好的编程体验。

另:以上代码在
【利好工具】JavaScript及时运行调试工具中运行更佳

相关文章

  • 日常开发之重构

    作为开发人员,应该让重构贯穿于你的开发日常的每一刻。 为什么这么说? 重构是为了改善软件的设计、结构和实现,同时保...

  • 浅谈遗留代码的重构

    背景 《重构》诞生至今有近17个年头了,日常开发中大家谈到重构,要么非常随意,认为重构就是改代码;要么非常谨慎,把...

  • 浅谈遗留代码的重构

    背景 《重构》诞生至今有近17个年头了,日常开发中大家谈到重构,要么非常随意,认为重构就是改代码;要么非常谨慎,把...

  • 代码重构利器

    使用重构件(Codemod)加速 JavaScript 开发和重构代码重构利器 —— jscodeshift 对于...

  • 二十五、尽早抽象和持续重构

    程序员在日常开发新的功能或重构已有功能时常会预见两种选择:1)可预见的抽象,尽早抽象,自顶向下推进重构;2)不可预...

  • 程序猿二三事之工具使用-Eclipse调试Java常用功能介绍

    [ TOC ] 调试常用功能介绍 日常java开发中实际写代码的时间并不会很多,花在整理思路,代码重构,调试bug...

  • 把《重构》变成工具书

    前言一、把它变成工具书二、概述何谓重构注释为何重构何时重构重构、架构和YAGNI重构与软件开发过程重构与性能如何重...

  • 开发 - 重构

    将片段提取到文件

  • 《重构-改善既有代码的设计》Martin Fowler

    What:何为重构 使用一系列重构准则,在不改变「软件之可察行为」前提下,优化代码结构。 软件开发的时间会分配给两...

  • 代码重构之道

    1. 什么是重构 1.1 重构(Refactoring) “重构”这个概念对于当代的开发人员来说已经不陌生,它最早...

网友评论

      本文标题:日常开发之重构

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