重构我们的代码_遵循DRY原则

news2025/1/9 0:08:15

在JavaScript中,DRY原则是指"Don’t Repeat Yourself",即不要重复自己的代码。它是一种编程原则,强调避免在代码中出现重复的逻辑、功能和结构。
遵循DRY原则有以下几个好处:

  1. 代码重用:通过将重复的代码抽象为可复用的函数、类或模块,可以减少代码量并提高代码的可维护性。
  2. 减少错误:重复的代码意味着需要多次更新和维护,增加了出错的机会。当只有一个地方需要修改时,可以减少潜在的错误发生。
  3. 可读性和可理解性:重复的代码会导致代码变得冗长和难以理解。通过遵循DRY原则,可以使代码更加精简和易读,提高代码的可理解性。
    要遵循DRY原则,可以采取以下措施:
  4. 抽象重复的代码:将重复的代码抽象为函数、类或模块,并在需要时进行调用。
  5. 使用循环和条件语句:使用循环来避免重复的代码块,使用条件语句来处理类似但稍有不同的逻辑。
  6. 优化数据结构:使用合适的数据结构来存储和管理数据,避免在多个地方重复存储相同的数据。
  7. 代码复用和模块化:将相似的功能封装成可复用的函数或模块,以便在多个地方进行调用。
    总之,遵循DRY原则可以提高代码的可维护性、可扩展性和可读性,减少错误的发生。通过抽象和复用代码,可以降低代码的冗余度,提高开发效率。

● 例如我们之前猜游戏的代码出现了很多的重复代码,这节课我们就来重构它

let secretnumber = Math.trunc(Math.random() * 20) + 1;

let score = 20;
let highscore = 0;

document.querySelector('.check').addEventListener('click', function () {
  const guess = Number(document.querySelector('.guess').value);
  console.log(guess);

  if (!guess) {
    document.querySelector('.message').textContent = '⛔No Number';
  } else if (guess === secretnumber) {
    document.querySelector('.message').textContent = '🎉Correct Number';

    document.querySelector('body').style.backgroundColor = '#60b347';
    document.querySelector('.number').style.width = '30rem';
    document.querySelector('.number').textContent = secretnumber;
    if (highscore < score) {
      highscore = score;
      document.querySelector('.highscore').textContent = highscore;
    }
  } else if (guess > secretnumber) {
    if (score > 1) {
      document.querySelector('.message').textContent = '📈Too high';
      score--;
      document.querySelector('.score').textContent = score;
    } else {
      document.querySelector('.message').textContent = '😭You lost the game!';
      document.querySelector('.score').textContent = 0;
    }
  } else if (guess < secretnumber) {
    if (score > 1) {
      document.querySelector('.message').textContent = '📉Too low';
      score--;
      document.querySelector('.score').textContent = score;
    } else {
      document.querySelector('.message').textContent = '😭You lost the game';
      document.querySelector('.score').textContent = 0;
    }
  }
});

document.querySelector('.again').addEventListener('click', function () {
  score = 20;
  document.querySelector('.score').textContent = score;
  document.querySelector('body').style.backgroundColor = '#222';
  document.querySelector('.message').textContent = 'Start guessing...';
  document.querySelector('.number').style.width = '15rem';
  document.querySelector('.number').textContent = '?';
  document.querySelector('.guess').value = '';
  secretnumber = Math.trunc(Math.random() * 20) + 1;
});

这是重构之前的代码

let secretnumber = Math.trunc(Math.random() * 20) + 1;

let score = 20;
let highscore = 0;

document.querySelector('.check').addEventListener('click', function () {
  const guess = Number(document.querySelector('.guess').value);
  console.log(guess);

  if (!guess) {
    document.querySelector('.message').textContent = '⛔No Number';
  } else if (guess === secretnumber) {
    document.querySelector('.message').textContent = '🎉Correct Number';

    document.querySelector('body').style.backgroundColor = '#60b347';
    document.querySelector('.number').style.width = '30rem';
    document.querySelector('.number').textContent = secretnumber;
    if (highscore < score) {
      highscore = score;
      document.querySelector('.highscore').textContent = highscore;
    }
  } else if (guess !== secretnumber) {
    if (score > 1) {
      document.querySelector('.message').textContent =
        guess > secretnumber ? '📈Too high' : '📉Too low';
      score--;
      document.querySelector('.score').textContent = score;
    }
  } else {
    document.querySelector('.message').textContent = '😭You lost the game!';
    document.querySelector('.score').textContent = 0;
  }
});

document.querySelector('.again').addEventListener('click', function () {
  score = 20;
  document.querySelector('.score').textContent = score;
  document.querySelector('body').style.backgroundColor = '#222';
  document.querySelector('.message').textContent = 'Start guessing...';
  document.querySelector('.number').style.width = '15rem';
  document.querySelector('.number').textContent = '?';
  document.querySelector('.guess').value = '';
  secretnumber = Math.trunc(Math.random() * 20) + 1;
});

这是重构的代码,将猜数字的太高和太低进行了优化,去除了很多重新的代码!

● 除此之外,我们还发现代码中有很多重复去修改message类的文本或者其他类的属性,我们可以将他存入一个函数中,然后将其直接调用即可

const displayMessage = function (message) {
  document.querySelector('.message').textContent = message;
};

在这里插入图片描述

其他也一样,都通过函数的方式去重构建。这里不再重复!
我们通过重构精简了代码,并且使得代码的逻辑更加的清晰!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1068307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA工具之debug第三方jar包源码顺序错乱

IDEA工具之debug第三方jar包源码顺序错乱 场景描述原因分析解决方案 场景描述 概述 使用IDEA排查问题时&#xff0c;经常需要debug源码&#xff0c;当F7跟进依赖jar包时&#xff0c;总是出现Decompiled.class file, bytecode version:51.0 (Java 7)&#xff0c;提示Source code…

Go-Python-Java-C-LeetCode高分解法-第九周合集

前言 本题解Go语言部分基于 LeetCode-Go 其他部分基于本人实践学习 个人题解GitHub连接&#xff1a;LeetCode-Go-Python-Java-C 欢迎订阅CSDN专栏&#xff0c;每日一题&#xff0c;和博主一起进步 LeetCode专栏 我搜集到了50道精选题&#xff0c;适合速成概览大部分常用算法 突…

双机并联逆变器自适应虚拟阻抗下垂控制(Droop)策略Simulink仿真模型

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

深挖 Python 元组 pt.1

哈喽大家好&#xff0c;我是咸鱼 好久不见甚是想念&#xff0c;2023 年最后一次法定节假日已经结束了&#xff0c;不知道各位小伙伴是不是跟咸鱼一样今天就开始“搬砖”了呢&#xff1f; 我们知道元组&#xff08;tuple&#xff09;是 Python 的内置数据类型&#xff0c;tupl…

案例解读【淘宝API接口的运用:抓取用户数据从而驱动精准营销

我国网络购物用户规模8.12亿占网民整体80.3%&#xff08;来源&#xff1a;中商产业研究院&#xff09;。由此可见&#xff0c;网络购物逐渐成为人们普遍选择的一种消费方式。作为连接买卖双方的服务方&#xff0c;电商平台掌握了海量的用户数据&#xff0c;用户数据作为一种宝贵…

electron.js入门-为生产环境构建应用程序

在本章中&#xff0c;我们将学习如何使用可执行文件生成生产应用程序&#xff1b;为此&#xff0c;我们将使用以下软件包&#xff1a; https://www.electron.build/ 需要注意的是&#xff0c;当您有兴趣生成应用程序的可执行文件时&#xff0c;必须在每个Electron.js项目中安装…

pmql基本使用

简介 Prometheus 通过指标名称&#xff08;metrics name&#xff09;以及对应的一组标签&#xff08;labelset&#xff09;唯一 定义一条时间序列。指标名称反映了监控样本的基本标识&#xff0c;而 label 则在这个基本特征上为 采集到的数据提供了多种特征维度。用户可以基于…

练[极客大挑战 2019]BuyFlag

[极客大挑战 2019]BuyFlag 文章目录 [极客大挑战 2019]BuyFlag掌握知识解题思路关键paylaod 掌握知识 ​ cookie字段的修改&#xff0c;代码审计&#xff0c;数字和字符串弱等于绕过&#xff0c;科学计数法替换长数字&#xff0c;GET请求包转换POST请求包 解题思路 打开题目…

php递归生成树形结构 - 无限分类 - 构建树形结构 - 省市区三级联动

直接上代码 示例 <?php/*** php递归生成树形结构 - 无限分类 - 构建树形结构 - 省市区三级联动* * param array $lists 一维数组&#xff0c;包括不同级别的各行数据* param int $parentId 目标节点的父类ID (可以是顶级分类的父ID&#xff0c;也可以是任意节点的父ID)* …

EfficientViT: 高效视觉transformer与级联组注意力

文章目录 摘要1、简介2、用视觉transformer加速2.1. 内存效率2.2. 计算效率2.3. 参数效率 3、高效视觉Transformer3.1、EfficientViT的构建块3.2、EfficientViT网络架构 4、实验4.1、实现细节4.2、ImageNet上的结果4.3、迁移学习结果4.4、 消融实验 5、相关工作6、结论 摘要 2…

手机投屏电脑软件AirServer5.6.3.0最新免费版本下载

随着智能手机的普及&#xff0c;越来越多的人喜欢用手机观看视频、玩游戏、办公等。但是&#xff0c;有时候手机屏幕太小&#xff0c;不够清晰&#xff0c;也不方便操作。这时候&#xff0c;如果能把手机屏幕投射到电脑上&#xff0c;就可以享受更大的视野&#xff0c;更流畅的…

【C++设计模式之命令模式:行为型】分析及示例

简介 命令模式是一种行为型设计模式&#xff0c;它将请求封装成一个对象&#xff0c;从而使不同的请求可以被参数化、队列化或记录化。这种模式允许请求的发送者和接收者进行解耦&#xff0c;同时提供更高的灵活性和可扩展性。 描述 命令模式的核心思想是通过命令对象来封装…

WIN11右键菜单更改为WIN7风格

1.按键盘上的 Win R 组合键&#xff0c;打开运行&#xff0c;输入 regedit 命令&#xff0c;按确定或回车&#xff0c;打开注册表编辑器&#xff1b; 2.注册表编辑器窗口中&#xff0c;依次展开到以下路径&#xff1a; HKEY_CURRENT_USER\Software\Classes\CLSID\ 3.左侧定位…

ICE综述

ICE综述 ICE(Internet Communications Engine)是ZeroC提供的一款高性能的中间件&#xff0c;基于ICE可以实现电信级的解决方案。在设计网站架构的时候可以使用ICE实现对网站应用的基础对象操作&#xff0c;将基础对象操作和数据库操作封装在这一层&#xff0c;在业务逻辑层以及…

notepad++ 如何去除换行

选中下方的“扩展” “查找目标”输入&#xff1a;\r\n&#xff0c;替换为:空白 最后全部替换。

钡铼DLT645和IEC104转Modbus协议网关BL120DT:构建智能电力网的关键角色

在电力行业中&#xff0c;DLT645和IEC104转Modbus协议网关已成为重要的通信工具&#xff0c;用于将电力设备的数据和状态信息转换为Modbus协议&#xff0c;以便于远程监控和管理。以下是关于钡铼DLT645和IEC104转Modbus协议网关BL120DT在电力行业应用的案例介绍。 某电力公司需…

记一次地市hw从供应商-目标站-百万信息泄露

起因&#xff1a;某市hw、给了某医院的资产&#xff0c;根据前期进行的信息收集就开始打&#xff0c;奈何目标单位资产太少&#xff0c;唯有一个IP资产稍微多一点点&#xff0c;登录框就两个&#xff0c;屡次尝试弱口令、未授权等均失败。 事件型-通用性-反编译jar-Naocs-后台-…

node-red opc-ua节点操作

node-red opc-ua节点操作 一、使用OPC UA客户端工具Softing OPC Client读写OPC节点数据二、 NodeRed通过OPC UA读取数据并写入mysql三、NodeRed订阅opcua数据&#xff0c;并通过mqtt发布 一、使用OPC UA客户端工具Softing OPC Client读写OPC节点数据 使用OPC UA客户端工具Soft…

超级扫描-专业、快速、安全的二维码和条形码工

官网下载地址&#xff1a; 安果移动 视频介绍&#xff1a;超级扫描-专业、快速、安全的二维码和条形码工具_哔哩哔哩_bilibili 在今天的数字化时代&#xff0c;无论您身处哪里&#xff0c;二维码和条形码无处不在。从商店的货架到在线广告&#xff0c;从名片到活动海报 &…

长江存储YMTC 232L QLC量产,低调上架

有粉丝朋友提醒小编&#xff0c;反馈长江存储232L QLC已经量产&#xff0c;并已经开始售卖了。小编一搜&#xff0c;还真是&#xff0c;“当季新品”。 技术规格信息显示&#xff0c;来自长江存储原厂QLC颗粒。 评论区有用户反馈确认是232层的QLC SSD。 但是&#xff0c;有个奇…