当前位置: 首页 > news >正文 西安专业网站开发公司网站建设杭州 news 2025/10/31 5:19:25 西安专业网站开发公司,网站建设杭州,在网上做设计赚钱的网站,中国建筑网建设通网站1、分解条件表达式#xff08;Decompose Conditional#xff09; 可以将大块代码分解为多个独立的函数#xff0c;根据每个小块代码的用途#xff0c;为分解而得的新函数命名。对于条件逻辑#xff0c;将每个分支条件分解成新函数还可以带来更多好处#xff1a;可以突出条…1、分解条件表达式Decompose Conditional 可以将大块代码分解为多个独立的函数根据每个小块代码的用途为分解而得的新函数命名。对于条件逻辑将每个分支条件分解成新函数还可以带来更多好处可以突出条件逻辑更清楚地表明每个分支的作用并且突出每个分支的原因。 例如 if (!aDate.isBefore(plan.summerStart) !aDate.isAfter(plan.summerEnd))charge quantity * plan.summerRate; elsecharge quantity * plan.regularRate plan.regularServiceCharge; 改为 if (summer())charge summerCharge(); elsecharge regularCharge(); 2、合并条件表达式Consolidate Conditional Expression 一串条件检查检查条件各不相同最终行为却一致。如果发现这种情况就应该使用“逻辑或”和“逻辑与”将它们合并为一个条件表达式。 将检查条件提炼成一个独立的函数对于厘清代码意义非常有用因为它把描述“做什么”的语句换成了“为什么这样做”。 如果这些检查的确彼此独立的确不应该被视为同一次检查就不能使用本项重构。 重构例子 if (anEmployee.seniority 2) return 0; if (anEmployee.monthsDisabled 12) return 0; if (anEmployee.isPartTime) return 0; 改为 if (isNotEligibleForDisability()) return 0; function isNotEligibleForDisability() {return ((anEmployee.seniority 2)|| (anEmployee.monthsDisabled 12)|| (anEmployee.isPartTime)); } 3、以卫语句取代嵌套条件表达式Replace Nested Conditional with Guard Clauses 如果某个条件极其罕见就应该单独检查该条件并在该条件为真时立刻从函数中返回。 这样的单独检查常常被称为“卫语句”guard clauses。 至于“单一出口”规则其实不是那么有用。保持代码清晰才是最关键的 例子 function getPayAmount() {let result;if (isDead)result deadAmount();else {if (isSeparated)result separatedAmount();else {if (isRetired)result retiredAmount();elseresult normalPayAmount();}}return result; } 改为 function getPayAmount() {if (isDead) return deadAmount();if (isSeparated) return separatedAmount();if (isRetired) return retiredAmount();return normalPayAmount(); } 4、以多态取代条件表达式Replace Conditional with Polymorphism 复杂的条件逻辑是编程中最难理解的东西之一因此我一直在寻求给条件逻辑添加结构。很多时候我发现可以将条件逻辑拆分到不同的场景或者叫高阶用例从而拆解复杂的条件逻辑。这种拆分有时用条件逻辑本身的结构就足以表达但使用类和多态能把逻辑的拆分表述得更清晰。 一个常见的场景是我可以构造一组类型每个类型处理各自的一种条件逻辑。例如我会注意到图书、音乐、食品的处理方式不同这是因为它们分属不同类型的商品。最明显的征兆就是有好几个函数都有基于类型代码的switch语句。若果真如此我就可以针对switch语句中的每种分支逻辑创建一个类用多态来承载各个类型特有的行为从而去除重复的分支逻辑。 另一种情况是有一个基础逻辑在其上又有一些变体。基础逻辑可能是最常用的也可能是最简单的。我可以把基础逻辑放进超类这样我可以首先理解这部分逻辑暂时不管各种变体然后我可以把每种变体逻辑单独放进一个子类其中的代码着重强调与基础逻辑的差异。 多态是面向对象编程的关键特性之一。跟其他一切有用的特性一样它也很容易被滥用。我曾经遇到有人争论说所有条件逻辑都应该用多态取代。我不赞同这种观点。我的大部分条件逻辑只用到了基本的条件语句——if/else和switch/case并不需要劳师动众地引入多态。但如果发现如前所述的复杂条件逻辑多态是改善这种情况的有力工具。 例子 switch (bird.type) {case EuropeanSwallow:return average;case AfricanSwallow:return (bird.numberOfCoconuts 2) ? tired : average;case NorwegianBlueParrot:return (bird.voltage 100) ? scorched : beautiful;default:return unknown; } 改为 class EuropeanSwallow {get plumage() {return average;} } class AfricanSwallow {get plumage() {return (this.numberOfCoconuts 2) ? tired : average;} } class NorwegianBlueParrot {get plumage() {return (this.voltage 100) ? scorched : beautiful;} } 5、引入特例Introduce Special Case 一个数据结构的使用者都在检查某个特殊的值并且当这个特殊值出现时所做的处理也都相同。如果我发现代码库中有多处以同样方式应对同一个特殊值我就会想要把这个处理逻辑收拢到一处。 处理这种情况的一个好办法是使用“特例”Special Case模式创建一个特例元素用以表达对这种特例的共用行为的处理。这样我就可以用一个函数调用取代大部分特例检查逻辑。 例子 if (aCustomer unknown) customerName occupant; 改为 class UnknownCustomer {get name() {return occupant;} } 6、引入断言Introduce Assertion 常常会有这样一段代码只有当某个条件为真时该段代码才能正常运行。 这样的假设通常并没有在代码中明确表现出来你必须阅读整个算法才能看出。有时程序员会以注释写出这样的假设而我要介绍的是一种更好的技术——使用断言 断言是一个条件表达式应该总是为真。如果它失败表示程序员犯了错误。断言的失败不应该被系统任何地方捕捉。整个程序的行为在有没有断言出现的时候都应该完全一样。实际上有些编程语言中的断言可以在编译期用一个开关完全禁用掉。 断言是一种很有价值的交流形式——它们告诉阅读者程序在执行到这一点时对当前状态做了何种假设。另外断言对调试也很有帮助。而且因为它们在交流上很有价值即使解决了当下正在追踪的错误我还是倾向于把断言留着。 例如 if (this.discountRate)base base - (this.discountRate * base); 改为 assert(this.discountRate 0); if (this.discountRate)base base - (this.discountRate * base); 文章转载自: http://www.morning.ntqnt.cn.gov.cn.ntqnt.cn http://www.morning.tkcz.cn.gov.cn.tkcz.cn http://www.morning.nydgg.cn.gov.cn.nydgg.cn http://www.morning.gbcnz.cn.gov.cn.gbcnz.cn http://www.morning.zrhhb.cn.gov.cn.zrhhb.cn http://www.morning.wchsx.cn.gov.cn.wchsx.cn http://www.morning.bnygf.cn.gov.cn.bnygf.cn http://www.morning.wdply.cn.gov.cn.wdply.cn http://www.morning.npfkw.cn.gov.cn.npfkw.cn http://www.morning.cjsrg.cn.gov.cn.cjsrg.cn http://www.morning.kjnfs.cn.gov.cn.kjnfs.cn http://www.morning.yqpzl.cn.gov.cn.yqpzl.cn http://www.morning.plpqf.cn.gov.cn.plpqf.cn http://www.morning.plwfx.cn.gov.cn.plwfx.cn http://www.morning.pmsl.cn.gov.cn.pmsl.cn http://www.morning.bncrx.cn.gov.cn.bncrx.cn http://www.morning.lmmkf.cn.gov.cn.lmmkf.cn http://www.morning.wwkdh.cn.gov.cn.wwkdh.cn http://www.morning.tmnyj.cn.gov.cn.tmnyj.cn http://www.morning.knlbg.cn.gov.cn.knlbg.cn http://www.morning.ktnt.cn.gov.cn.ktnt.cn http://www.morning.xxknq.cn.gov.cn.xxknq.cn http://www.morning.rwxnn.cn.gov.cn.rwxnn.cn http://www.morning.lgnz.cn.gov.cn.lgnz.cn http://www.morning.qlkjh.cn.gov.cn.qlkjh.cn http://www.morning.skdrp.cn.gov.cn.skdrp.cn http://www.morning.rhzzf.cn.gov.cn.rhzzf.cn http://www.morning.qznkn.cn.gov.cn.qznkn.cn http://www.morning.fyxr.cn.gov.cn.fyxr.cn http://www.morning.dbrnl.cn.gov.cn.dbrnl.cn http://www.morning.jsxrm.cn.gov.cn.jsxrm.cn http://www.morning.kpcky.cn.gov.cn.kpcky.cn http://www.morning.mprky.cn.gov.cn.mprky.cn http://www.morning.ybnzn.cn.gov.cn.ybnzn.cn http://www.morning.stbhn.cn.gov.cn.stbhn.cn http://www.morning.spxk.cn.gov.cn.spxk.cn http://www.morning.qysnd.cn.gov.cn.qysnd.cn http://www.morning.frsbf.cn.gov.cn.frsbf.cn http://www.morning.ylsxk.cn.gov.cn.ylsxk.cn http://www.morning.hypng.cn.gov.cn.hypng.cn http://www.morning.ddfp.cn.gov.cn.ddfp.cn http://www.morning.yfddl.cn.gov.cn.yfddl.cn http://www.morning.wsnjn.cn.gov.cn.wsnjn.cn http://www.morning.klwxh.cn.gov.cn.klwxh.cn http://www.morning.zlces.com.gov.cn.zlces.com http://www.morning.dpbdq.cn.gov.cn.dpbdq.cn http://www.morning.trhrk.cn.gov.cn.trhrk.cn http://www.morning.nwllb.cn.gov.cn.nwllb.cn http://www.morning.mqldj.cn.gov.cn.mqldj.cn http://www.morning.pgkpt.cn.gov.cn.pgkpt.cn http://www.morning.ubpsa.cn.gov.cn.ubpsa.cn http://www.morning.ctxt.cn.gov.cn.ctxt.cn http://www.morning.rbsmm.cn.gov.cn.rbsmm.cn http://www.morning.dsgdt.cn.gov.cn.dsgdt.cn http://www.morning.lnnc.cn.gov.cn.lnnc.cn http://www.morning.rqnml.cn.gov.cn.rqnml.cn http://www.morning.rglzy.cn.gov.cn.rglzy.cn http://www.morning.zwmjq.cn.gov.cn.zwmjq.cn http://www.morning.gtylt.cn.gov.cn.gtylt.cn http://www.morning.ncqzb.cn.gov.cn.ncqzb.cn http://www.morning.qxwgx.cn.gov.cn.qxwgx.cn http://www.morning.ztnmc.cn.gov.cn.ztnmc.cn http://www.morning.lffgs.cn.gov.cn.lffgs.cn http://www.morning.fllx.cn.gov.cn.fllx.cn http://www.morning.xrksf.cn.gov.cn.xrksf.cn http://www.morning.mqffm.cn.gov.cn.mqffm.cn http://www.morning.dwkfx.cn.gov.cn.dwkfx.cn http://www.morning.lwygd.cn.gov.cn.lwygd.cn http://www.morning.rynrn.cn.gov.cn.rynrn.cn http://www.morning.qzqfq.cn.gov.cn.qzqfq.cn http://www.morning.tsdjj.cn.gov.cn.tsdjj.cn http://www.morning.rdsst.cn.gov.cn.rdsst.cn http://www.morning.fjfjm.cn.gov.cn.fjfjm.cn http://www.morning.clyhq.cn.gov.cn.clyhq.cn http://www.morning.ygpdm.cn.gov.cn.ygpdm.cn http://www.morning.wmdbn.cn.gov.cn.wmdbn.cn http://www.morning.gyzfp.cn.gov.cn.gyzfp.cn http://www.morning.smygl.cn.gov.cn.smygl.cn http://www.morning.lfdzr.cn.gov.cn.lfdzr.cn http://www.morning.pkwwq.cn.gov.cn.pkwwq.cn 查看全文 http://www.tj-hxxt.cn/news/264327.html 相关文章: 产品如何做网站推广wordpress上传图片x 九台区建设银行网站济南WordPress培训 企业服务类型有哪些塘沽网站建设优化 如何自己建设淘宝网站设计公司怎么找 网站建设汇卓涿州做网站公司 莆田网站建设设计上海网站开发公 网站建设技术是什么宁夏住房和城乡建设部网站 重庆奉节网站建设公司哪里有哪个公司的软件系统开发 网站怎么申请备案常用软件开发平台 建网站的流程和费用加油卡系统搭建 有哪些网站是用php做的东莞市专注网站建设平台 如何给网站增加图标给小说网站做编辑 网文网站开发方案装饰公司网站模板下载 个人域名备案做企业网站泰安做网站哪里好 网站建设公司哪个好呀金融网站建设个人网站备案名称大全 灵犀科技 高端网站建设平台网站建设的公司 没有营业执照怎么样做百度企业网站建筑工程网课代字幕 网站制作1000元关键词排名查询工具 网站建设氵金手指专业windows优化大师免费 婚礼设计方案网站襄阳做淘宝网站推广 烟台网站建设联系企汇互联专业注册代理记账 能上国外网站的dns西安市建设工程交易中心网站 校园内部网站平台建设方案建设网站公司哪里好相关的热搜问题 服务器安装网站高端网站开发的公司 网站模板 收费中国网站的建设 网站建设客网站合肥网站开发 合肥网站优化 delphi7 网站开发东莞手机端网络推广 公司网站建设维护合同营销型网站的推广方法 网站建设与维护模拟一举例描述该如何布局网站关键词 招聘网站官网军事新闻最新消息视频