时间:2021-05-26
思维导图
点击下图,查看大图。
条件语句的“合并理由”也同时指出了“不要合并”的理由:如果你认为你的这些检查的确彼此独立,的确不应该被视为同一次检查,那么就不要使用本项重构。因为在这种情况下,你的代码已经清楚表达出自己的意义。
Consolidate Duplicate Conditional Fragments状况:在条件式的每个分支上有着相同的一段代码,那么将这段重复代码搬移到条件之外。Remove Control Flag状况:在一系列布尔表达式中,某个变量带有“控制标记”的作用,那么以break语句或return语句取代控制标记。Replace Nested Conditional with Guard Clauses状况:函数中的条件逻辑使人很难看清正常的执行路径,那么使用卫语句(Guard Clauses)表现所有特殊情况。此代码的坏味道:
1、它太长,当视频有新类型的时候,它会变得更长。
2、它明显做了不止一件事。
3、它违反了单一权责原则,因为它有好几个修改它的理由。
4、它违反了开放闭合原则,因为每当添加新类型时,必须修改它。不过最麻烦的可能是到处皆有类似结构(_get类型名Rank())的函数。
Introduce Assertion状况:某一段代码需要对程序状态(state)做出某种假设,那么以断言(assertion)明确表现这种假设。运行结果:
运行结果:
采点: 1、常常会有这样的代码,只有当某个条件为真时,该段代码才能正常运行。——实际上程序最后成品往往将assertion统统删除。 2、这样的假设通常并没有在代码中明确表现出来,你必须阅读整个算法才能看出。——有时候程序员会以注释写出这样的假设,而assetion是一种更好的技术。 3、assertion是一个条件式,应该总是为真。如果失败,表示程序员犯了错误。 4、assertion可以作为交流与调试的辅助。——交流:可以帮助程序员阅读理解代码所做的假设。调试:帮助程序员找到bug,可以在距离最近的地方抓住bug。 5、assertion并不改变程序的任何行为。 6、assertion价值:帮助程序员理解代码正确运行的必要条件。 7、建议最好把assertion的条件式使用Extract Method,为了将若干地方的重复码提炼到同一个函数中,也许只是为了更清楚说明条件式的用途。总结 这一章我比较喜欢“Replace Nested Conditional with Guard Clauses “这个方式,我在平时的代码中也经常这样用,还有人给这种方式取名叫”卫从句“。 还有一个就是我经常在php开发中用的调试是var_dump()或print_r(),我也第一次发现php中还有assert这种方式,不错! 在学习和实践的过程中,我也学到了很多不错的方式。但是我觉得在团队开发中,有的时候还是”大局为重“,按照团队的习惯方式去编码,或者你可以跟团队沟通,得到大家的认可之后,在使用这里面的方法,这样大家彼此调试和阅读对方代码的时候比较方便。声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
思维导图介绍承接上文的PHP杂谈《重构-改善既有代码的设计》之重新组织你的函数继续重构方面的内容。这章主要针对数据的重构。1、争论的声音——直接访问Field还
if结构if(条件表达式){//执行代码}elseif(条件表达式){//执行代码}else{//执行代码}条件表达式的结果是true|false,具体的形式:
for循环的格式为:for(【初始化表达式】;【条件表达式】;【迭代表达式】){//语句块}其中:【初始化表达式】;【条件表达式】;【迭代表达式】都是可选的,【
条件表达式条件表达式也称为三元表达式,表达式的形式:xifCelsey。流程是:如果C为真,那么执行x,否则执行y。经过测试x,y,C可以是函数,表达式,常量等
1.while循环(只有在条件表达式成立的时候才会进入while循环)while条件表达式: passwhile条件表达式: passelse: pass