首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我的两条路线非常相似,以至于我复制-粘贴了大部分内容。我想我需要把代码弄干,但我不确定该怎么做

代码重构(Code Refactoring)是将现有代码转换成新的结构,同时保持其外部行为不变的过程。这个过程可以帮助你提高代码的可读性、可维护性和扩展性。当你的两条路线非常相似,复制粘贴了大部分内容时,重构代码是一个很好的选择。

基础概念

  • 代码重复(Code Duplication):相同的代码块出现在多个地方。
  • 重构(Refactoring):在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。

优势

  • 提高代码的可读性和可维护性。
  • 减少错误,因为修改一处代码可以影响所有相关的地方。
  • 提高开发效率,因为代码更加简洁和模块化。

类型

  • 提取方法(Extract Method):将一段代码提取成一个新的方法。
  • 内联方法(Inline Method):将方法的调用替换成方法体的内容。
  • 移动方法(Move Method):将方法从一个类移动到另一个类。
  • 提取类(Extract Class):将类的部分属性和方法提取到新的类中。

应用场景

  • 当你发现代码中有重复的逻辑块时。
  • 当你想改进代码的结构,使其更易于理解和维护时。
  • 当你想减少代码的复杂性时。

如何解决这些问题

假设你有两条非常相似的路线,代码如下:

代码语言:txt
复制
function routeA() {
    // 相似代码块1
    console.log("Route A - Step 1");
    // 相似代码块2
    console.log("Route A - Step 2");
    // 特定于Route A的代码
    console.log("Route A - Specific Step");
}

function routeB() {
    // 相似代码块1
    console.log("Route B - Step 1");
    // 相似代码块2
    console.log("Route B - Step 2");
    // 特定于Route B的代码
    console.log("Route B - Specific Step");
}

你可以使用提取方法来重构这段代码:

代码语言:txt
复制
function commonStep1() {
    console.log("Common Step 1");
}

function commonStep2() {
    console.log("Common Step 2");
}

function routeA() {
    commonStep1();
    commonStep2();
    console.log("Route A - Specific Step");
}

function routeB() {
    commonStep1();
    commonStep2();
    console.log("Route B - Specific Step");
}

参考链接

通过这种方式,你可以减少代码重复,提高代码的可维护性和可读性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何学习一门新的语言?

当你怀着崇敬的心情,打开扔给你的网址,看着满屏幕的代码时,你会对自己问出那三个经典的哲学问题。这是什么东西?它是怎么做到的?为什么要这么写?搞不好某些人还会因为惊吓过度,从而失去了学习下去的信心。...大段的注释 说一件事你们不要笑,在我还是个萌新的时候,我曾经对这些穿插在代码中的神秘文字产生了深深的困惑,我还以为它们对代码有某种加成作用,以至于我还试验过把注释去掉会对代码执行产生什么影响。...更何况,为了适配某些系统奇葩的运行环境,开发者往往会大开脑洞,创造出一些非常奇怪的代码。这些旁门左道充满了玄学和不确定性,初学者看多了可能会发生如武侠小说里练功出差错的结果:走火入魔。...而大部分号称教你入门的文章,可能也就是告诉了你如何搭建一个运行环境,这门语言的精髓和重点作者自己估计也没弄明白。 而如果你碰到一篇被奉为经典的好的入门文章,那你真的要好好感谢作者。...我认为看代码是非常有必要的,因为光死记语法是无法掌握好这门语言的。但是去看一些大型项目代码的缺点我在上面也说了,到底该如何是好呢?

34020

逆向分析Spotify.app并hook其功能获取数据

虽然Spotify API仅允许获取最近50首播放的歌曲,但我们可以设置一个cron job来重复轮询该端点。...我最终在:https://github.com/nevyn/spmediakeytap上找到了SPMediaKeyTap库。我想我可以试一试,看看Spotify是否复制并粘贴了这个库中的代码。...看起来非常相似,不是吗?我们可以看到,对每种类型的键都调用了一个公共函数sub_10006FE10,只设置了一个整数参数来区分它们。让我们hook它,看看我们是否可以记录按下的键。...看看sub_10006FE10(我不会在这里包含它,但我强烈建议你自己检查一下),我们可以看到它实际上是sub_10006DE40的包装器,其中包含了大部分内容: ? 哇!这看起来很复杂。...不可否认,为此我花了一些时间,但我想请你注意底部第四行的call r12。如果你查看其他的一些情况,你会发现一个非常相似的调用寄存器的模式。这似乎是一个很好的函数,但我们如何知道它在哪呢?

1.4K30
  • 【教程】一小时向非程序员介绍 R 编程语言

    接着,我让妹妹在一个R脚本文件中保存了上面那两行代码(我认为,在初学者开始使用一门语言时就教会他们如何正确地把代码保存在脚本文件中是非常重要的)。...在R中我该怎么做X这件事”是初学者最常见的问题之一,我认为这个问题的答案可能应该是”使用函数Y( )”——所以重要的是能够搞清楚如何使用函数Y( )。...这部分的内容相当有趣,以至于我妹妹开始主导学习过程了:不再是我说“我要教你如何做什么”,而是她主动问“嗯,我们能画一个散点图吗?”或“你觉得我们可以把最优拟合直线放到那个图上吗?”...临别时我又给了她一些资料:这个,这个和这个,这些资料我都不是非常熟悉——但我知道,要想能够用R分析实际数据,所需的时间远大于在我这儿的一个小时。...我相信我已经覆盖了大部分基础知识,我妹妹也觉得这对她非常有帮助。我很乐意听各位来谈谈你是如何应对”一小时内向非程序员介绍R”这个挑战的。

    88280

    我新鲜出炉的 plist 图集拆图工具!github

    这些年,我一直在使用 JavaScript 、CocosCreator做开发,只要是他们不能解决的,我都不太愿意去弄,或者说是不太情愿去做。...想到这里,有点点兴奋,我拿起 Python 开干!...代码大概分成两大部分: 解析 plist 文件,解析出子图在图集中的矩形位置 通过分析出的子图矩形数据,将子图纹理导出生成图像 大的思维有了,解析 plist 应该是有对应的工具库的,我也是 Python...出来的大部分是用 plistlib 这个库,而且是 Python 自带的!非常好,第一个问题有解了,先不管细节,再看第二个问题! 继续在百度上搜索:python3 图片处理 ?...好两次我想放弃了,明明知道怎么做,就是弄不好,语法出错,运行报错! 最气人的是,我写出的代码,到处是波浪线,我用的是 PyCharm 这个神器级别的IDE。

    5.6K50

    【Linux系统编程】Linux编辑器——vim

    由于我们对文件进行了修改,直接q退出可能会退不了 所以我们要wq,wq就代表保存写入的内容并退出(保存退出) 末行模式下输入wq,然后回车 就退出来了,并且我们刚才写入的内容也成功保存了...那我现在向复制光标所在的这一行: 按yy,就可以复制光标所在行的内容 按完yy,并没有什么反应,但是此时已经复制好了。 那我想把复制的内容,粘贴到当前光标位置的下一行。...对应的指令是p 按一次,就粘贴一次,一直按,就一直粘贴 当然,你如果按100p,就直接粘100行 即npp,直接粘n行到光标所在行之后 那刚才yy是复制一行的内容,如果想一次复制...同样的np就可以粘n次。 依次撤销上一次操作 刚才复制的3行,我再敲个20p,粘贴20次,然后 我后悔了,我想把刚才粘贴的操作撤销掉,可以吗?...我先粘贴个1000行内容 然后,我现在想把光标移动到最后一行,怎么做?

    39310

    2017 学习 JavaScript 感觉如何?

    问: 你不会想说服我,让我重返web开发之路吧。 答: 等一等,听我说完。有了现代web框架,你的代码仅需反映数据状态是如何映射到web网页的,这就一下子没那么难懂了。...答: 目前这些你都可以全部跳过,一旦你对现代web开发的主体有了一定的认识和感觉,你仅仅复制一下我做的就可以了,除了babel和rollup之外也没什么了。...classPlanetApp{ view(){ return( ); } } 问: 那个一定是新的ES6类语法,我喜欢它的外观形式,但我不确定HTML和Javascript混在一起会怎么样。...问: 哦,我想我现在搞懂了!JSX语法只是Javascript的一种表现形式,所以我可以随心所欲地操控它,我猜PlanetRow 组件会变得非常简单,对吗?...我在这给你展示一下,甚至当你仅考虑简洁性这一点时,箭头函数都非常好用。 问: 好的,我知道你讲的情况了,它们都是过滤函数,但我打赌所牵扯的事件处理器不可能那么简洁。 答: 就那么简洁,就是有点抽象。

    779100

    收下这份推荐系统入门指南

    当然对于我们个人来讲,做一个上图这样完善和强大的推荐系统恐怖有些难度,不管是友善的界面设计、完善的数据流,还是完备的技术支持、架构设计,一个人恐怖力所不能及,但是也不要灰心,毕竟一口吃不成胖子,我们可以从一个简单的推荐系统入手...推荐系统怎么做 这里介绍的新闻推荐系统案例是基于Python进行开发的,所以只要你看的懂Python代码,会写Python代码,你也可以做出来一个这样的推荐系统。...,所以会给用户提供一些选择,依次对用户进行推荐,如下图所示: 用户在系统内产生一些行为之后,会记录到数据库中,后台代码逻辑会根据用户的实时行为进行“为你推荐”,如下图所示: 在每篇新闻的详情页面,会根据离线计算好的新闻相似度...读到这里,我想大家心中都会有一个疑问,就是如果我想学习推荐系统,并想在该领域有自己的成就,我该怎么做?别着急,一起来看下一部分的内容,如何学习推荐系统。...▊ 掌握Spark技术,掌握海量数据背景下的模型构建 我们都知道企业内的数据是海量的,Python在单机的情况下对海量的数据建模几乎是不可能的(当然很多也会使用Python写Spark代码,但我个人是很不习惯

    40620

    入门 | 一小时向非程序员介绍 R 编程语言

    接着,我让妹妹在一个R脚本文件中保存了上面那两行代码(我认为,在初学者开始使用一门语言时就教会他们如何正确地把代码保存在脚本文件中是非常重要的)。...在R中我该怎么做X这件事”是初学者最常见的问题之一,我认为这个问题的答案可能应该是”使用函数Y( )”——所以重要的是能够搞清楚如何使用函数Y( )。...这部分的内容相当有趣,以至于我妹妹开始主导学习过程了:不再是我说“我要教你如何做什么”,而是她主动问“嗯,我们能画一个散点图吗?”或“你觉得我们可以把最优拟合直线放到那个图上吗?”...临别时我又给了她一些资料:这个,这个和这个,这些资料我都不是非常熟悉——但我知道,要想能够用R分析实际数据,所需的时间远大于在我这儿的一个小时。...我相信我已经覆盖了大部分基础知识,我妹妹也觉得这对她非常有帮助。我很乐意听各位来谈谈你是如何应对”一小时内向非程序员介绍R”这个挑战的。 脚注 注1. 即便对明尼苏达来说,天气也真的太冷了。

    1.1K60

    学习与人生——聊聊我的学习方法

    我平常是如何学习的? 学习前期的准备 目标规划 不知道是否已经养成了习惯,还是怕自己经常会迷茫,不知道该干啥。以至于我经常会给自己指定目标和规划。...Go 开发者路线图 然后,我自己又讲里面的内容,整理到了自己的思维导图里面。...对于我来说,上学时,我喜欢的科目,叫主动学习;我不喜欢的科目,叫被动学习(这可能也是我偏科的原因之一吧)。而现在,学习编程,就完完全全的是主动学习了。...也许是为了让我少打游戏这么干的吧,我也没有找他本人确认过,但是有一点可以肯定的是,不善的引导、甚至用小孩子认为的更粗暴的方式对对待他这种行为的话,很容易讲好奇心扼杀在摇篮中的!...而当我 commit 代码时,也会感到快乐——结果性快感。当你经常性的出现这些快感的话,就会产生“成隐性”。以至于只要周末一有空,我就会写写代码。 我想,玩游戏可能也是这样吧,一玩就停不下来。

    59341

    我是如何学习数据结构与算法的?

    在这里说一下前阵子有个非常火爆的专栏—-【数据结构与算法之美】 我没买这个专栏,我想说的是,买了就一定要去看,千万别浪费。...我觉得,在做题的时候,一定要追求完美,千万不要把一道题做出来之后,提交通过,然后就赶紧下一道。 算法能力的提升和做题的数量是有一定的关系,但并不是线性关系。...我举道例题吧: 问题: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?...牛客网刷题有个非常方便的地方就是有个讨论区,那里会有很多大佬分享他们的解题方法,不用我们去百度找题解。所以你做完后,实在想不出,可以很方便着去看别人是怎么做的。...视频和书我以前有推荐过: 算法与数据结构书籍与视频福利 例如对于平衡树,可能你跟着书本的代码实现之后,过阵子你就忘记,不过这不要紧,虽然你忘记了,但是如果你之前用代码实现过,理解过,那么当你再次看到的时候

    1.5K10

    中年程序猿图鉴

    要点概览: 我们被固定在“敲代码”的坑里,一干就是10年,再干别的早已不会。敲代码已经成了一项流水线般的工作,就像搬砖工一样。...这个行业根本不存在吃青春饭这一说,关键是40岁就要干40岁该干的活,35岁就要干35岁该干的活,你不能35岁还在干30岁干的活。 加班和掉头发是肯定的,不敢天天洗头,生怕哪天秃顶。...比如有一次我改一个差不多40多行的代码,对我来说非常简单,不到一天就能改完,但我花了一周的时间,大部分都用在了协调和沟通上,这跟我的性格不太相符。...关键就是40岁就要干40岁该干的活,35岁就要干35岁该干的活,你不能35岁还在干30岁干的活。 公司肯定是需要35岁以上的程序员的,但肯定不是35岁的一线工作人员。...这几年,我的工作内容变化不是很大,但是圈子里的新技术是肯定要去学的。

    56820

    奥特曼谈AI的机遇、挑战与人类自我反思:中国将拥有独特的大语言模型

    奥特曼:我不确定这是否是一个准备好的问题,但我欣然接受。我们对几周前发布的GPT-4o感到非常满意,因为它在更多种类的语言上都表现出色,我们将继续让未来的版本更加优秀。...奥特曼:是的,那并非她的声音,我们也无意让它听起来像她。对于造成的混淆我深表歉意,显然你认为它是,但关于声音相似度的问题,人们的看法各不相同。然而我们确信那不是她的声音,我们也不确定还能补充些什么。...因为内容的发布变得如此容易--创建网页易如反掌,编造故事不费吹灰之力,一切活动都变得轻而易举,以至于网络几乎变得难以导航和穿透。你是否也有这样的担忧?...同时,人工智能还伴随着其他一些非常重要的短期问题。我不认为监管的焦点应该是将要开发出通用人工智能,它将像科幻小说中那样,我们该如何应对?...我想我们都认同,世界将以戏剧性的方式变化,为了成功,我们必须不断学习。他担心我们会变得过于依赖技术,以至于我们不再知道如何去学习,这让他感到忧虑。奥特曼:你是否也有这样的担忧?

    22610

    大神告诉你秘诀:内化它的逻辑

    有网友诉说了自己的苦恼—— 我曾经非常擅长用不同的语言写代码,可是在一年后,我就完全忘记了如何用这些语言写代码。...现在我正在尝试学习 Lua,我能看懂每一行的意思,但是到了要写出来的时候就不知道该怎么做了。 针对ta的苦恼,网友大神们纷纷给出建议。 你是说循环、变量之类的语法吗? 还是说排序、搜索、递归?...你是否需要学习3种不同的编程语言并观看4小时的视频才能完成实际上非常简单的任务?或者你能不能找到一些简单的服务器来存储你的简易数据库——它的使用和集成如此简单,以至于白痴都能很快找到它?...在我看来,从记忆的角度理解算法是行不通的。你需要内化它的逻辑。 想想其他你知道该怎么做的事,你可能可以写下它的每一步,但你做的时候不会特意去想。比如做黄油吐司。想象一下,你有一个按钮式烤面包机。...如果你在维护别人的代码时,可能会发现有些代码非常晦涩,并且涉及很多间接调用和/或副作用。在这种情况下,只需问问自己该代码的输入和输出是什么。只有在你需要重构一个东西时,才需要更深入的研究。

    45810

    与OpenAI CEO萨姆·阿尔特曼对话:AGI将在10年后到来

    但考虑早期的AI浪潮,也就是过去十年左右,显然在那个时期还有很多之前的事情发生。但我们似乎发现,这个时期的大部分价值都流向了巨头,这是为什么?...但就图像模型而言,我们已经开放了Whisper等语言模型,这是非常令人兴奋的。我认为世界上大量使用人工智能是件好事,而不是坏事。开放源代码是可能推动更多使用的人工智能发展的一个重要渠道。...但如果涉及到任何“我们 vs 他们”的竞争,我们现在认为这是一件坏事。即使我们认为合并是好的,许多人也确实会这样做,但将来还是会有很多人不愿意。 我认为人类的需求将仍然非常相似,已经持续了数十万年。...所以这是一个厚重的权衡过程。 我更可能相信它在训练过程中是某种方式具有意识的。即使这听起来不太可能,我也表达了我的不确定性,认为这超出了科学的范畴,至少对于我知道如何确定的东西超出了界线。但可以吗?...这让我想起了早期计算机编程并不方便,以至于我们做了很多如今在AI基础设施中常见的事情,比如堆砌服务器或整个栈,这些在未来几年可能会被自动化处理。

    17510

    审阅“史上”最烂的代码

    网站经常分享一些糟糕的代码和有关编程的话题。今天,我看到一段令我难以置信的代码: ? 本周最烂代码 仔细看看,上面的代码错误太多,以至于我不知从何谈起。...所以,这个网站到底是怎么确定我是谁的?也许它只是通过用户名 / 密码身份验证显示一些私人内容,所以它没有展示任何个人数据。总之,没有人知道代码为什么会这么写。...4代码格式化问题 代码格式可能是整个代码中不太重要的部分,但我们可以很容易地判断出该开发人员复制 / 粘贴了某些网站上的代码。...StackOverflow 复制粘贴了一些代码,甚至都没有遵循整个代码库的代码规范来重写它们。...大家不要误会,我每天都会在 Google 上进行搜索,但比起仅仅复制和粘贴代码来实现功能,理解代码的工作原理——比如理解如何设置 Cookie,实际上更为重要。如果由于某种原因整个进程中断了怎么办?

    63830

    概率图模型

    过去的一段时间里,忙于考试、忙于完成实验室要求的任务、更忙于过年,很长时间没有以一种良好的心态来回忆、总结自己所学的东西了。这几天总在想,我应该怎么做。...后来我才明白,应该想想我现在该做什么,所以我开始写这篇博客了。这将是对概率图模型的一个很基础的总结,主要参考了《PATTERN RECOGNITION and MACHINE LEARNING》。...看这部分内容主要是因为LDPC码中涉及到了相关的知识。概率图模型本身是值得深究的,但我了解得不多,本文就纯当是介绍了,如有错误或不当之处还请多多指教。 0. 这是什么?...所以他们是这样做的,为什么可以?我也没弄明白,我只是感觉了一下,觉得差不多……思想是一样的,就是把概率分开,分开了才能体现特点。...这一部分内容还没怎么看,如果有机会的再好好看看吧,现在实在是…… 这部分内容我也是初学,且主要在差错控制编码(LDPC)上,希望能和大家多多交流.

    92920

    纲要-Java网络爬虫系统性学习与实战(1)

    纲要-Java网络爬虫系统性学习与实战(1) 文章目录 介绍 郑重声明 适合人群 本系列内容 联系方式 Java网络爬虫系统性学习与实战系列 介绍 网络上大部分都是Python爬虫,为什么大家喜欢用Python...我自己不是很喜欢用Python写爬虫,因为我有一个自己写的SaaS爬虫项目,用Java写的,元数据类型、爬取算法、数据解析、页面规则、任务调度、告警监控等等,如果用Python来写,我想我弄不来。...Java强就强在生态,全能的事情用Java来干,基本不会有大问题,就算有疑难杂症,也会有一些解决方案。...而且对于我这种类型把Java作为主要开发语言的人来说,不喜欢用Python来写,其他人我不知道,至少我是不喜欢的。 奈何,网上关于Java爬虫的资料真的很少。...如果有新网站,大家想学习怎么用Java获取其中信息的,可以通过最后微信公众号联系我,我会一一写成实战,并将文章放入到该专栏(随着文章数量增多,价格会逐渐增加)。

    51920

    Windows 的开发好痛苦

    下文记录了我在 Windows 上尝试一些“基本”的开发任务时,所遭遇的痛苦经历。 01 文本编辑器 多年以来,我已经习惯了使用 Vim,以至于我的思维方式都习惯了 Vim。...我从 2013 年 11 月就在 Vim 中加入了这个设置,然后甚至忘了自己曾经加过这个设置,以至于我以为这是 Vim 的默认行为。 但是,很显然我错了。...如果复制一大段文字到删除寄存器中,实际上就是放到剪贴板中。如果我向剪贴板中放入一些内容,实际也会自动放到删除寄存器中。这个操作其实非常方便。...这个组合其实非常好,因为加载速度很快,并且 fish 支持很多好用的功能,例如基于历史的自动补齐等。更不用说,st 还支持选择即复制、右键粘贴的功能,在需要快速移动文本时非常方便。...所有下载下来的游戏都能玩,不需要修改 GPU 驱动的路径。而且几乎报告的任何问题都能得到妥善解决。 总的来说,我想我可以忍受 Windows 上的开发体验。

    1.5K50

    如何批量添加中文和英文数字之间的空格?用正则表达式吧

    但我们可能尚未养成这样的输入习惯,以至于要么全部没有空格,要么部分加了空格,部分没有。当然您可以不在乎这个文本规范。...我掌握这个技能,最初并非源于我个人写作排版,而是近日处理很多文字内容编辑时的一个刚需。掌握这个技能,帮我显著提高了工作效率,把重复性肌肉劳动大幅度降低。...2、正则表达式省掉千次万次机械操作 我的电脑中可以没有微软或金山的任何办公软件,但不可以没有 vscode 和 jupyter lab。vscode 不仅可以用于写代码,还可用于写文章。...普通模式可直接复制粘贴你想要的样式,即便它有换行也是 OK 的。——在常见的办公软件中通常不支持复制粘贴换行,这足见 vscode 的强大实用。 ?...vscode 非常棒的一点在于,此时我已经可以预览修改后的效果,待确认无误后,再点击执行全部替换即可。

    2.4K20

    从程序员转运营的这一年,我曾每天都想离职,只是...

    因为我还是个菜鸟,下面的大部分能力都是我不具备的,更多的是我从身边的大佬那学习和思考总结的。...商业思维 我认为是我最缺失的,比如大家遇到过很多数据结果很好商业行为,或者做的很好的产品,大家有没有去思考过他们为什么这么做,怎么做的,如果是你怎么做?...如何过滤信息,把最关键的内容传达到? 以前也觉得做ppt是花架子,花里胡哨的不如我们干实事的, 但是现在我发现这么多的信息,要把产品一整年未来很久的规划,在十几页甚至几页的ppt里容纳下。...只用十几二十分钟就让别人知道你在做怎样的事情,你有怎样的规划,有怎样的问题以及你对应的解法,表达清楚,也是非常非常厉害的能力。...做程序员我不是厉害的,也没放足够多精力在岗位上,但是做个会写代码的运营那是不是就能体现我的优势了?

    65810
    领券