代码坏味道与重构之重复代码

2023-11-09

1. 重复代码的特征

重复代码是代码坏味道的典型代表。

重复代码是指相同或相似的代码在一个以上的地方出现。通常有以下几种情形:

  • 同一个类,多个方法间重复
  • 子类之间代码重复
  • 不相干类间代码重复

2. 重复代码的影响

重复代码会影响代码的可读性和可维护性,如果有问题,需要修改多处重复代码,容易修改遗漏。

3. 重复代码的重构技巧

我们的目标是消除重复,简化代码,针对重复代码的情形,可以采用如下手法重构:

情况 重构方式 快捷键操作
同一个类,多个方法间重复 抽提方法 Ctrl + Alt + M
子类之间代码重复 方法上移到父类 Ctrl + Alt + Shift + T -> Pull Members Up
或 鼠标右键 -> refactor -> Pull Members Up
不相干类间代码重复 搬移函数,提取为独立类供调用 F6
或 Ctrl + Alt + Shift + T -> Move Instance Method
或 鼠标右键 -> refactor -> Move Instance Method

综上,重复代码在绝大部分情况下都是代码坏味道,但是有时重复代码可以达到解耦的目的,如果消除了重复就会导致耦合,这种情况,重复是合理的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

代码坏味道与重构之重复代码 的相关文章

  • 混乱的代码是技术债吗

    翻译自 Uncle Bob 的 Blog A Mess is not a Technical Debt 主要是鲍勃大叔的观点 混乱的代码实现不是技术债 原文地址见超链接 The term Technical Debt was created
  • 谷歌打响全面反击战!官宣AI重构搜索、新模型比肩GPT-4,朝着ChatGPT微软开炮...

    点击上方 视学算法 选择加 星标 或 置顶 重磅干货 第一时间送达 明敏 丰色 发自 凹非寺量子位 公众号 QbitAI 万众瞩目 谷歌的反击来了 现在 谷歌搜索终于要加入AI对话功能了 排队通道已经开放 当然这还只是第一步 大的还在后面
  • 【配电网重构】高比例清洁能源接入下计及需求响应的配电网重构【IEEE33节点】(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 数据 2 2 DG 与负荷 24 h 功率分布曲线 2 3 需求响应措施对重构结果的
  • 关于互联网思维与技术团队的一些总结

    2017 7 4更 真正在底层工作的人员 跟站在高层的人看到的东西都是两个东西 真正的从底层走到高层才能看的更精准 同样的 从底层走到高层的人 也没有一直处在高层的远见与见识 我信奉公司处于什么阶段用什么样的人 没必要一开始就弄高精尖的人和
  • 腾讯mini项目-【指标监控服务重构】2023-07-19

    今日已办 OpenTelemetry Logs 通过日志记录 API 支持日志收集 集成现有的日志记录库和日志收集工具 Overview 日志记录 API Logging API 允许您检测应用程序并生成结构化日志 旨在与其他 teleme
  • 【Python VTK】读取二维序列医学图像分割结果并进行三维重建

    一 问题描述 最近在开发过程中遇到了这样的问题 在医学图像开发过程中 我们将医学图像通过深度学习算法进行分割 现在想要通过这一套二维图像进行三维重构 以下是分割结果 图一 前列腺核磁图像分割结果 图一 前列腺核磁图像分割结果 图一 前列腺核
  • 重构总结

    之前就听说 重构 改善既有代码的设计 这本书很经典 一直没有机会拜读 书中讲的都是很实用的重构小技术 很多人肯定都用过 看完之后还需要在工作中多多使用 下面总结了一下这本书的知识点 方便日后查看
  • 微电网重构

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 本文目录如下 目录 1 概述 2 数学模型 3 算例仿真及结果 4 结论 5 参考文献 6 Matlab和Python代码及文章详细讲解 1 概述 分布式能源 DE
  • CH06_第一组重构(下)

    封装变量 Encapsulate Variable 132 曾用名 自封装字段 Self Encapsulate Field 曾用名 封装字段 Encapsulate Field let defaultOwner firstName Mar
  • 重复代码(克隆代码)的几个概念与类型

    本文内容来源于以下两篇参考文献 1 Chanchal K Roy James R Cordy Rainer Koschke Comparison and Evaluation of Code Clone Detection Techniqu
  • 一个重构:开闭原则案例

    原始代码 public class Alert private AlertRule rule private Notification notification public Alert AlertRule rule Notificatio
  • 代码坏味道与重构之重复代码

    文章目录 1 重复代码的特征 2 重复代码的影响 3 重复代码的重构技巧 1 重复代码的特征 重复代码是代码坏味道的典型代表 重复代码是指相同或相似的代码在一个以上的地方出现 通常有以下几种情形 同一个类 多个方法间重复 子类之间代码重复
  • 科研笔记(九)重构智能手机CSI指纹用于室内定位(上)

    重构智能手机CSI指纹用于室内定位 题目 CRISLoc Reconstructable CSI Fingerprinting for Indoor Smartphone Localization 论文作者 Zhihui Gao Yunfa
  • 架构之重构的 12 条军规

    注 架构之重构的 12 条军规 上 发布以后 一些读者着急要下篇 所以在这里我把上下篇合并成一篇 让大家可以阅读完整版 不用分开看了 对于开发者来说 架构设计是软件研发过程中最重要的一环 所谓没有图纸 就建不了房子 在遍地 App 的互联网
  • 如何提升项目管理过程中测试阶段的工作效率?

    按照测试阶段划分 分析需求 评审 方案制定 用例设计 用例执行 验收 报告 1 需求了解阶段 测试人员应该是最熟悉需求的人 甚至高于产品和业务 应该是对所测系统中细节 逻辑 真实情况最了解的人 没有之一 需求评审 了解阶段 多提出建设性的意
  • 主动配电网SOCP_OPF学习笔记(4)配电网重构

    配电网中的开关一般可分为联络开关和分段开关 联络开关负责转供备用和网络结构优化 常开 分段开关用于连接两条线路段的开关 为常闭 通过改变这两种开关的状态来调整网络拓扑结构 称为网络重构 加入联络开关支路会形成弱环网 1 辐射状拓扑约束 为了
  • 困惑:单元测试该在什么时候写?

    原文 http www codinghorror com blog 2005 04 good test bad test html 作者 Jeff Atwood 很多年以来 用于随机测试 ad hoc test 的工具我都是自己开发的 但在
  • CH07_封装

    封装记录 Encapsulate Record 162 曾用名 以数据类代替记录 Replace Record with Data Class organization name Acme Gooseberries country GB c
  • 基于Nonconvex规划的配电网重构研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 本文基于Nonconvex规划的配电网重构
  • 腾讯mini项目-【指标监控服务重构】2023-07-30

    今日已办 调研 CPU Memory Cadivisor adivisor gt Prometheus gt Grafana SigNoz Web google cadvisor Analyzes resource usage and pe

随机推荐

  • Linux下的bochs安装

    强烈建议使用ubuntu系统 apt get指令太好用了 安装各种依赖相当简单 1 首先到bochs网站上下载一个linux版本bochs 在安装之前需要安装一些依赖 sudo apt get install build essential
  • JavaScript原生实现事件监听及手动触发

    事件监听 标签中的onxxx 比如
  • AOM联盟:AV1完成1.0版定稿

    在2018年第一季度结束前 AOM联盟完成了AV1 1 0版定稿 这是这一新兴生态的最新胜利 文 包研 图 AOM官网发布消息 今天 AV1的规格 参考代码和绑定格式向开发者开放 来源 AOM官网 北京时间3月28日晚间消息 AOM联盟宣布
  • Docker存储卷(一)详解

    目录 什么是存储卷 为什么要用存储卷 Docker存储卷的特性 Docker为容器提供了两种存放数据的资源 storage driver Data Volume bind mount 实例 docker managed volume 实例
  • getevent/sendevent 使用说明

    这两天准备写一下input子系统的分析 过程中发现了两个好工具 呵呵 就是本文介绍的主角 getevent用于获取当前系统input设备的一些参数和实时事件的数据 sendevent用于发送input事件 这样在调试的时候遇到有的样机按键坏
  • Tensorflow分布式训练原理

    以下文章摘录自 机器学习观止 核心原理与实践 京东 https item jd com 13166960 html 当当 http product dangdang com 29218274 html 由于博客系统问题 部分公式 图片和格式
  • python中imread用法_Python matplotlib.pyplot.imread()用法及代码示例

    Matplotlib是Python中的一个库 它是数字的 NumPy库的数学扩展 Pyplot是Matplotlib模块的基于状态的接口 该模块提供了MATLAB like接口 matplotlib pyplot imread 功能 mat
  • Android 11 设置开机默认系统横屏显示

    实现 默认横屏有两套方案 第一种方式 目录 device rockchip rk356x BoardConfig mk SF PRIMARY DISPLAY ORIENTATION 90 第二种方式 Android系统默认是竖屏显示的 想要
  • Git fetch、pull以及merge之间的区别

    笔者当时学习git的时候对fetch以及pull命令之间的区别疑惑不解 被困扰了许久 其实还是对git的原理理解不深才会有这种情况 git对每次提交都会生成一个cmmit id 我们工作区间版本改变其实就是HEAD指针指向的commit i
  • [Git & GitHub] Windows下安装git,从0开始搭建git环境(配置环境变量+设置git-ssh key...配置)(超全版)

    目录 前提准备 安装Git Git配置 配置环境变量 git配置 ssh认证配置过程 配置邮箱和用户名 个人身份 文本换行符配置 前提准备 下载地址 点击此处 点击Windows进行下载 若下载比较慢 点击此处 安装Git 下载之后 双击G
  • Android安全检测-Intent Scheme URLs攻击风险

    一 漏洞原理 利用intent scheme URLs 意图协议URL 可以通过web页面发送intent来启动App应用 攻击者可构造特殊格式的URL直接向系统发送意图 启动App应用的Activity组件或者发送异常数据 导致应用的敏感
  • python3.7添加dlib模块

    1 下载dlib安装包 安装dlib真是费劲 dlib下载地址 http dlib net files 我下载的是dlib 19 14 zip 然后解压安装dlib 在安装dlib前需要安装Boost和Cmake dlib19之后你需要安装
  • Windows DWrite 组件 RCE 漏洞 (CVE-2021-24093) 分析

    聚焦源代码安全 网罗国内外最新资讯 概述 Windows图形组件DWrite库存在数组越界写漏洞 CVE 2021 24093 可导致远程代码执行 当DWrite库解析恶意构造的字体文件时 计算内存分配长度时出现错误 触发越界写 而且字体文
  • simulink电力电子仿真(2)单相桥式半控整流电路实验

    simulink电力电子仿真 2 单相桥式半控整流电路实验 返回目录 主要是赶上了疫情 然后期末要疯狂补实验报告 就索性写一下吧 万一以后再做电力电路仿真 可能会有用的 也希望可以帮助别人 器件的选择及位置 MATLAB的版本 2018a
  • <Linux开发>系统移植 -之- linux构建BusyBox根文件系统及移植过程详细记录

    Linux开发 系统移植 之 linux构建BusyBox根文件系统及移植过程详细记录 前言 本章节讲解的是构建移植BusyBox根文件系统到linux开发板 主要是基于正点原子Linux开发板操作 接下来讲解具体过程记录 BusyBox源
  • sql概念模型和逻辑模型

    一 概念模式和E R图 概念模型的表示方法很多 目前比较常用的是实体联系模型 简称E R模型 E R模型主要用E R图来表示 实体间的联系有 一对一联系 一对多联系 多对多联系 E R模型用矩形框表示现实世界中的实体 用菱形框表示实体间的联
  • Linux开发(七):多线程通信与同步

    线程间无需特别的手段进行通信 因为线程间可以共享数据结构 也就是一个全局变量可以被两个线程同时使用 不过要注意的是线程间需要做好同步 目录 一 互斥锁 1 初始化 1 动态初始化 2 静态初始化 2 加锁 3 解锁 4 销毁互斥锁 5 互斥
  • 为什么bytes32等于uint256

    先说1byte等于8个字节 bytes32则等于8 32 256个字节 接着uint8同样等于8个字节 uint256即8个字节的32倍 256 8 32 因此看到byteX和uintY时 如果X 8 Y 意味着byteX uintY
  • JVM Troubleshooting命令-jinfo

    概述 用来查看正在运行的Java应用程序的扩展参数 支持在运行时 修改部分参数 命令格式 jinfo option pid jinfo option executable core jinfo option servier id remot
  • 代码坏味道与重构之重复代码

    文章目录 1 重复代码的特征 2 重复代码的影响 3 重复代码的重构技巧 1 重复代码的特征 重复代码是代码坏味道的典型代表 重复代码是指相同或相似的代码在一个以上的地方出现 通常有以下几种情形 同一个类 多个方法间重复 子类之间代码重复