日常开发之重构

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

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


为什么这么说?

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


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


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

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

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




目录
相关文章
|
iOS开发 MacOS
LabVIEW如何使用热键去触发自定义的事件
LabVIEW如何使用热键去触发自定义的事件
376 1
|
开发框架 Unix Linux
深度探索:Qt CMake工程编译后的自动打包策略
深度探索:Qt CMake工程编译后的自动打包策略
851 0
|
物联网 智能硬件
物联卡是什么
物联卡,专为物联网设计的通信介质,由运营商提供给企业用户,用于智能终端联网。基于物联网专网,支持短信、数据、语音等服务。广泛应用于共享单车、移动支付等领域。具备流量池管理功能,可作为身份验证。购买时需注意真伪,确保合法合规使用。它是物联网技术的关键,保障了设备间稳定可靠的数据通信。
物联卡是什么
|
9月前
|
API 开发者
了解 HTTP 的PUT 与 POST方法的综合指南
HTTP PUT 和 POST 方法是构建 Web 应用与 API 的核心工具,用于资源的创建与更新。PUT 方法通过指定 URL 更新或创建完整资源,具有幂等性;而 POST 方法更灵活,主要用于创建新资源,但不具备幂等性。本文详细对比了两者在请求体、URL 使用、资源处理等方面的区别,并提供了实际应用示例,帮助开发者根据场景选择合适的方法以优化 API 设计。
|
分布式计算 资源调度 大数据
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(二)
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(二)
307 0
|
存储 分布式计算 Java
踏上大数据第一步:flume
Flume 是一个分布式、可靠且高效的系统,用于收集、聚合和移动大量日志数据。它是 Apache 顶级项目,广泛应用于 Hadoop 生态系统中。Flume 支持从多种数据源(如 Web 服务器、应用服务器)收集日志,并将其传输到中央存储(如 HDFS、HBase)。其核心组件包括 Source、Channel 和 Sink,分别负责数据获取、临时存储和最终存储。本文还介绍了在 Ubuntu 20.04 上安装 Flume 1.9.0 的步骤,涵盖 JDK 安装、Flume 下载、解压、配置环境变量及验证安装等详细过程。
314 10
|
弹性计算 Kubernetes 安全
容器化管理ACK
ACK一种管理容器平台的管理架构
404 2
java工具类调用service层,mapper层
java工具类调用service层,mapper层
318 1
|
SQL 监控 安全
在Linux中,如何检测和防止SQL注入和跨站脚本(XSS)攻击?
在Linux中,如何检测和防止SQL注入和跨站脚本(XSS)攻击?

热门文章

最新文章