首发于 Phodal - 手工艺人
【代码范式集】:IDE 重构

【代码范式集】:IDE 重构

重构,指对软件代码做任何更动,以增加可读性或者简化结构,而不影响输出结果。可是我们要如何才能不影响输出结果呢???答案是:测试。测试的意义在于对输出结果进行测试,用于保障现有代码的功能是正常的。一旦我们修改了代码,导致测试失败了,那我们就知道哪里改错了。

因此重构依赖于单元测试和可测试的代码(即短小、可 mock 的代码)。在重构之前,对应的代码拥有测试是信心的保证。可由于种种情况,我们的代码中不存在测试,我们就放弃代码重构吗?

所以,这篇文章讲述地是,如何在不包含测试的情况下,来对代码进行重构——IDE 重构。需要注意的是,IDE 重构在大部分的情况下是不会影响输出结果的,但是在极少数的情况下可能会影响结果——比如 IDE 出 bug 了。hiahiahiahia~

范式:IDE 重构

IDE 重构,即借助于 IDE 来对代码进行重构,其通常是由快捷键来触发。它将重构的主要工作交给 IDE,而不是由开发人员痛苦的修改代码来完成。多数时候,我们只需要按下快速键,再输入一些必要的名称、参数,重构就完成了。因此,它是每天我们的开发中,不可获缺的一部分。可以随时随地进行,而不需要预留一个专用的重构时间。

自然而然发生

那些,我们视为腐烂的代码,并不是在第一天就如此。在最初设计的时候,它们往往有着好的代码结构,良好的设计规范。只是随着时间的推移,业务不断地增加,代码量便不断地增加,缺乏有效的代码改善机制,便会使得代码腐烂。但是,我们也不能提前对代码进行重构,那样的话就是过度设计。

重构,有时在编写代码的过程中,自然而然发生的。而 IDE 重构则是,编写代码的过程中,看到可以重构的地方,按下IDE 的快速键,迅速地完成战斗。

因此,就这种角度来看,IDE 重构是自然而然发生的,它应该作为日常开发的一部分,而不是额外的花费时间进行重构。在这一点上,也普通的代码重构是不同的。普通的代码重构,是我们看到之前的代码写得不符合规范、设计,便进一步地想去改善质量。往往,我们也会将这处重构,放置在完成功能之后进行。

值得注意的是IDE 重构所能做的内容有限,远不及常规重构的范围来得广泛。

如下是微前端 Mooa 框架中,最初某个函数的代码的一部分:

而随着业务的演进,代码便进一步便得复杂:

一旦,我们添加了一个新的条件,我们的代码会进一步复杂化。而在那之前,对于 if 语句而言,我的做法是什么也不做,因为无法预料它的演变。一来,这样的 if 语句没有多少演进的方式,提供重构成多态则进一步复杂代码。二来,当遇到新的需求变更时,原先的重构可能等于白做,甚至于会影响我们下一步的编程。

不过,在上述的过程中,我做了两件事:

而这些都可以通过 IDE 的提取变量的快捷键来完成。

从容不迫应对


由于 IDE 重构,更多的是依赖于工具,而不是依赖于编程经验。它可以为年轻(编程经验少)的程序员,带来一定的信心,使得他/她们开始敢去重构代码。你可能也会担心,它带好一个不好的习惯,即在不编写测试的时候,进行代码重构。所以,它看上去像是一把双刃剑。但是,在我的想法来看,只要能开始去改变,那就是一个好的开始。每个老年(资深)程序员,都是从一个坑过去的,要不就不是资深的程序员。

换句话来说,当你遇到一个棘手的问题,而有一个资深的程序员,快速地帮你解决了问题,说明他/她也走过这个坑。比如,你应对一个 git 冲突的时候,可能会束手无策,哪怕你对 SVN 再熟悉,你也要面对这种变化。这样的问题解决多了,也就有经验了。这种方式和 IDE 重构一样,都只是使用工具而已。

即使都是使用工具,就只是工具的熟悉程度与否。练习,多加练习,然后掌握 IDE 重构,迈出了第一步。再向前,你就开始走向真正的重构了。

最小犯错成本


虽然说是使用 IDE 进行重构,但是在复杂的情况下,它可能还是会出错。因此,进行任何的重构之前,我们都需要打造一个安全的环境——至少,将要重构的代码应该在本地进行提交,又或者提交到服务端。它相当于我们在完成了业务功能之后,进行一系列小的修改。

即它意味着,我们可以在一个安全的时间里提交代码,又意味着哪怕是重构失败,我们也可以回退。诸如 Git 这种支持本地提交的代码版本管理工具,大概是我见过最好的减少犯错成本的工具。不论,我对本地的代码库做怎样的修改,都可以从远程获取原来的代码。

事实上,不止于还需要提供一个安全的团队环境(政治环境),即让程序员能花时间去改善代码。但是,这种重构需要存在时间的限制。

对于重构来说,新手程序员更加需要适当地鼓励,辅以合适的技术培训,或者进行手把手的结对编程。

缺点:有限的代码质量改善


让我们再强迫一遍:

它只是一种快速的重构方式,对于复杂的代码结构来说,往往是无能无力的。

不过,要对于这一种类似的 if 语句来说,换成 switch 语句并没有改善多少可读性。

这个时候,我们可能会考虑换成多态,这样便需要依赖于手动进行重构——需要依赖于测试。但是多态,又可能进一步复杂化代码——行数和类变得更多了。

工具

既然,本文的标题是 IDE 重构,但是它应该是叫工具重构。主要是笔者,懒,懒得配置编辑器,所以就习惯使用了 IDE。要怪就怪我司,给程序员配了 IDE。

IDE

大量的 IDE 支持重构功能,打开你最常使用的工具,你也会发现:咦,我的 IDE 也有这样的功能。如 Jetbrians 家的 Intellij IDEA 对于静态类型语言,如 Java 的支持就更好了:

如上图所示,其拥有大量地可用的重构功能。反正都是交了信仰费的人,不掌握好工具,对不起自己的辛辛苦苦的码字。

Editor + 重构插件

现在的,普通的编辑器,也拥有这样的重构功能,如 Visual Studio Code 便自带了一些。哪怕是诸如 Vim 这种原始的 IDE,加上对应的重构插件,也可以完成相应功能。如在 Visual Studio Code 中提供了一些对应的重构功能。其中比较常用的有:

诸如 JavaScript 这一类的动态语言,则会应了那句话:“动态类型一时爽,代码重构火葬场”。因为各式的智能提示,都依赖于对语言的静态类型检查,但是动态类型往往很难实现这一点。使用 TypeScript 对于可维护的代码是一个可好的选择。

示例

相关的内容,可以看我之前录的视频: v.youku.com/vshow/idXMTI2NjQ0NDAxMg==.html

深圳SEO优化公司思茅百度关键词包年推广价格信阳百度爱采购南山SEO按天计费哪家好中山网络推广公司延边网站优化按天收费报价阜新优秀网站设计多少钱岳阳百度竞价包年推广多少钱延安SEO按天计费报价肇庆企业网站建设南京建网站报价丹竹头企业网站设计哪家好十堰网络营销多少钱随州百搜标王推荐张北网站搭建推荐漯河网站搜索优化公司宁波关键词排名徐州外贸网站建设哪家好坑梓百度网站优化排名哪家好乐山模板网站建设哪家好新乡关键词排名包年推广多少钱双龙关键词排名价格黔南关键词按天计费多少钱随州设计网站公司银川SEO按天收费长沙SEO按效果付费报价大运营销网站公司南充阿里店铺托管东营关键词按天计费公司徐州模板网站建设报价贵港百度关键词包年推广歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化