范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

重构手把手教你重构一段烂代码之见名知意

  话不多说,直接上这次要重构的目标:public class Application {      private List theList;          ...          // 本次需要重点关注的代码     public List getThem() {         List list1 = new ArrayList<>();         for (int[] x : theList) {             if (x[0] == 4) {                 list1.add(x);             }         }         return list1;     } }代码的坏味道
  这是一段很短且真实逻辑并不复杂的代码,但是从这段小小的代码里面,我们却嗅到了不少坏味道:不明所以的List到底是个啥?出现了魔数(magic number)4。x[0]中这个下标0,代表什么意思?theList又是什么鬼?
  总结来说:代码缺乏好的命名,无法让阅读者根据名字(函数名、变量名)来了解函数总体的逻辑。第一步重构
  如果把代码改成下面这个样子,或许会好一点:public class Application {      private static final int FLAGGED = 4;     private static final int STATUS_VALUE_INDEX = 0;      private List gameBoard;      ...      public List getFlaggedCells() {         List flaggedCells = new ArrayList<>();         for (int[] x : gameBoard) {             if (x[STATUS_VALUE_INDEX] == FLAGGED) {                 flaggedCells.add(x);             }         }         return flaggedCells;     } }
  在这一步的重构中,我们仅仅是修改了函数名、变量名,定义出了常量。其中:theList变成了gameBoard。getThem变成了getFlaggedCells。魔数4被抽取为常量FLAGGED。魔术0被抽取为STATUS_VALUE_INDEX。list1变成了flaggedCells。
  相信你看到这段代码,对它的作用已经能猜个七七八八了:
  这大概是一个棋盘类游戏,棋盘由一个个格子构成,每个格子用一个int数组来表示。之所以用数组,是因为格子所包含的信息很多,比如颜色、值等等。其中,0这个下标代表格子的状态信息。如果被标记(flagged)过,数值为4。第二步重构
  接下来,用面向对象的思想,再把一些信息"封装"一下。public class Application {      private List gameBoard;      public List getFlaggedCells() {         List flaggedCells = new ArrayList<>();         for (Cell cell : gameBoard) {             if (cell.isFlagged()) {                 flaggedCells.add(cell);             }         }         return flaggedCells;     }      private static class Cell {          private static final int FLAGGED = 4;         private static final int STATUS_VALUE_INDEX = 0;          private int[] info;          ...          private boolean isFlagged() {             return info[STATUS_VALUE_INDEX] == FLAGGED;         }     }  }
  在这一步,通过定义Cell这个类(实际上不需要是内部类),部分实现细节屏蔽掉了。
  上层应用不需要关注Cell内部是如何存储各种信息的,当前依然保留了int[]作为底层实现,但是数组是一种比较裸的用法,后续完全可以替换为更好的形式。
  Cell提供了isFlagged方法,让上层应用可以只关心是否标记这样的业务逻辑,而不需要关注4和0这样的实现细节。
  实际上有了这些之后,可通过Lambda表达式把getFlaggedCells化简到一行,你知道怎么做吗?总结
  Phil Karlton说:
  There are only two hard things in Computer Science: cache invalidation and naming things
  大家平时都在讲工匠精神,有时候,匠心的体现并不需要多么花里胡哨的炫技,只需要好好的给代码取个见名知意的名字,或许就已经成功了一半。
  说明:因为之前写的各种文章阅读量实在过于惨淡,所以这是一个新开的、比较偏实操一些的系列。其中代码的例子来自于《Clean Code》,文字部分为原创内容。

备用机是什么?要怎么选呢?备用机顾名思义,就是另外一台备用的手机(能达到手机的功能的设备亦可,如平板等)。通常是主力机出现问题后,临时用备用机一段时间。当然有的人可能是主力机和备用机一起用,尤其是一部安卓一中国芯的困境设计封测达到5nm,但制造困在14nm无法前进这一两年最火的科技产业是什么,也许有人会说是5G是无宇宙,但这些与芯片比起来,都不算什么。2020年国内新增芯片企业2万多家,而今年截止至3季度末,已经新增芯片企业3万多家,去年和第一篇elasticsearch问题以及解决方案本文基于elasticsearch版本7。10编写而成。1脚本更新对象数组中的某个属性值。说下背景,业务方有需求说,商品图片开启了CDN加速,之前的图片域名都要修改,数据库中的图片win10系统,哪个版本最好用?windows10系统最好用版本介绍自2020年1月14日开始,微软公布宣布终止对win7系统的支持,那麼之后将不容易对win7系统开展安全修复和升级。而再次应用win7系统可能巨大的增加病毒感染和故意软件进攻的风险RedmiK40好不好用,看性能就知道凭借骁龙870LPDDR5内存UFS3。1闪存这最具性价比的配置,RedmiK40成为目前互联网热度最高的手机之一,也成了小姐姐手中的真香机。这个组合在性能和发热方面优势明显,几乎E拆解红米Note11Pro有13的芯片来自联发科21年余额不足了,接着又要迎来新年度旗舰了。每个品牌产品线众多,拆解快跟不上脚步了。现在分享红米Note11Pro拆解内容还有人看吗?红米一直主打高性价比,价格位于千元左右,属于非小黄鱼215元淘到全新小主机中兴CT340超低功耗,就是这性能拉胯创作立场声明本文所有商品为自费购入。如参加张大妈家的活动获得,我会在文中点明。坚持独立的评价观点是笔者创作的基本底线,绝不会因商品来源不同而有所偏颇,请各位放心。今天给大家介绍中兴34岁河南小哥辞了公务员,一个人到重庆跑滴滴,我却莫名有点羡慕Hello,大家好,老陈又来跟大家分享司机故事了。最近老陈为了给大家收罗重庆滴滴司机的故事,还特意加入了一个球队,周末休息的时候,一些司机会约到打球,我也跟到去打了两次,认识了很多2022年ai安全市场规模及ai安全行业报告分析AI安全行业前景AI安全行业现状如何?国际标准化组织(ISO)开展了人工智能系统生命周期过程标准项目,将人工智能系统全生命周期概括为初始ai安全设计研发检验验证部署运行监控持续验证字节阿里微软等等笔试Top20都有这些,10年刷题经验分享前言数据结构和算法可以让程序员脱胎换骨,刷算法题可以帮助我们通过面试和笔试,找到梦寐以求的工作,进入一线大厂或者拿高薪。怎么刷题呢?LeetCode上有2000多道题目,难道要全部设计心理学之人工智能美唐纳德A诺曼设计心理学4未来设计读书心得近年来不断有人讨论或者担忧,未来人工智能会否取代人类成为地球主宰,人类成为机器人的奴隶?今年元宇宙爆发,或许更增加了部分人类的担忧,虚拟世
美政府宣布将在未来5年拨款近50亿美元,以部署电动汽车充电桩智通财经APP获悉,白宫正在努力遏制气候变化和让更多美国民众使用电动汽车。周四,美国能源部和交通部宣布,将在未来5年内拨款近50亿美元,以帮助各州加强部署电动汽车的充电服务。总统拜你觉得未来的手机会带全息投影吗?为什么?感谢邀请,你觉得未来的手机会带全身投影吗?为什么?关于这个问题我觉得未来的手机会带全身投影的,因为未来的科学发展使人无法估量的,它会超乎人们的想象力,虽然我不明白全身投影的具体项目潮玩是否是未来社会的主流?潮玩是否是未来社会的主流,不会,也不可能是。因为潮玩只是一些新潮的体育项目娱乐精品推荐,即便是他聚合了国内很多的体育娱乐场馆,虽然可以免费场馆体验,试玩,运动交友等等,各种活动,但晶体管技术迎来颠覆,手机续航或重回周充时代?手机在过去的二十年间完成了从功能机向智能机的进化。如今,作为移动互联网的重要终端,手机已经成为我们日常生活必不可少的赛博器官。在手机向智能机进化的过程中,手机变得性能更强大,拍照更解析植物胰岛素科学家发现水稻增产新机制科技日报杭州2月9日电(洪恒飞陈鎏琰记者江耘)记者9日从中国水稻研究所获悉,该所张健研究员团队与胡培松院士团队经合作,首次揭示了植物胰岛素6磷酸海藻糖(Tre6P)调控水稻碳源分配隐伏型顺层边坡稳定性研究获进展隐伏型顺层边坡广泛存在于自然边坡和工程边坡,由于顺向结构面没有出露而是向下隐入坡脚,坡体内容易集聚高能量孕育大型滑坡。随着新建川藏铁路雅安至林芝段雅鲁藏布江下游水电开发等西部重大工B站这回摊上大事了,B站员工春节加班猝死,公司股价蒸发三千亿春节期间本是阖家欢乐幸福的日子,可是B站的员工却再也享受不到这种欢乐,B站春节期间某员工突发脑出血,是加班导致猝死还是其他原因?可能有人对B站不是很了解,我们一起看看B站是什么?一币安火币等1400家加密企业入驻,迪拜的吸引力在哪里?财联社区块链日报(杭州,记者徐赐豪)讯,日前,沙特阿拉伯宣布将投资64亿美元用于元宇宙和区块链技术。实际上,同样作为石油大国的阿拉伯联合酋长国一直是世界上最支持和拥抱区块链的国家之亚马逊欧洲站FBA费用上涨,美国港口或将持续拥堵2。11跨境早报新闻直通车01hr亚马逊欧洲站发布公告称,为帮助英国和欧盟卖家发展业务,欧洲站将于3月31日起更新推荐费以及亚马逊物流费用(FBA)。亚马逊欧洲站发布公告称,为帮助英国和欧盟卖家发背后的力量华云数据为东方证券IT架构转型升级保驾护航随着数字化经济浪潮的持续推进,以金融科技为引导的创新已全面崛起,金融业正结合新技术重塑IT架构革新应用,借数字化转型赢得新机遇。尤其是证券行业,新技术的发展给证券行业带来了商业模式ios系统更新到15。4版本了,说说要注意的几点1如果你是iPhone12及以上,还是最好更新,毕竟带着口罩解锁非常香!2如果你是iPhone12以下,最好停留在15。3版本上,15。3版这个正式版非常稳定!续航和信号都还可以,