php重构:改进现有代码的设计四个简化的条件表达式
点击下图查看大图。
介绍
条件逻辑可能非常复杂,因此本章提供了一些简化它们的重构技术。
对全文的简要描述(您可以跳过以下内容)。
核心重构:分解条件分离和交换逻辑(交换逻辑)和操作细节(细节)分离。
多个试验相同的结果:合并条件表达
在条件代码中删除重复组件:合并副本
确定特殊情况:用保护条款取代嵌套条件句
删除讨厌的控件标记:删除控制标志
技术术语
分解:分解,分离
合并:合并
合格的:合适的,合格的
碎片:碎片,碎片
巢:筑巢
后卫:后卫
条款:条款
多态:多态性
断言:断言
未检查的异常:无法控制的异常
分解条件表达式
状态:您有一个复杂的条件(如果是if语句),那么函数是从if的三个段落中提取的,否则,如果。
合并条件表达式
状态:您有一些条件测试,它们都得到相同的结果。然后将这些测试合并为一个条件公式,并将该条件提取为独立函数。
动机:1。合并的条件代码会告诉你,实际上只有一个条件检查,但有几个平行的条件需要检查,使检查的意图更清楚。
2,为提取方法做准备,通过将检查条件细化为一个独立函数来清除代码的含义非常有用,它改变了做什么和为什么做的语句。
合并条件声明的原因也指出不合并的原因。如果你认为你的检查是独立的,你不应该被看作是同一个检查,所以不要使用这个重建。因为在这种情况下,你的代码清楚地表达了你的意思。
合并重复的条件片断
状态:每个条件分支都有相同的代码,然后这个重复的代码被移出该条件。
拆下控制标志
状态:在一系列布尔表达式中,变量具有一个控制标记的函数,然后用一个断点语句或一个返回语句替换控件标记。
使用卫述句来代替嵌套的条件判断
条件:函数中的条件逻辑使得很难看到正常的执行路径,然后使用保护子句来显示所有特殊情况。
条件形式的两种形式:
1。所有分支都是正常行为:使用{如果…其他的。}
2。条件式是非常罕见的:条件应该分开检查,当条件为真时,它立即从函数中返回。
用条件从句替换嵌套条件句:特别注意分支。
用多态替换条件
状态:你的手上有一个表情。它根据不同的对象类型选择不同的行为。然后将这个条件公式的每个分支放在子类重写函数中,然后将原始函数声明为抽象函数。
这个代码的臭味:
1。它太长了,而且当视频有一个新的类型时它会变长。
2,它显然做了不止一件事。
3,它违背了权责发生制的单一原则,因为它有几个原因来修正它。
4。这违反了开放封闭原则,因为每次添加一个新的类型,它必须被修改。但最麻烦的事情是,有一个功能,具有相似的结构(_get类型名称等级(到处))。
引入斷言
状态:某一段代码需要对程序状态(状态)做一些假设,然后用断言(断言)来表示这个假设。
运行结果:
运行结果:
挖掘点:
1,经常有这样的代码,只有当某个条件是真的时才可以正常运行。
2,这种假设通常是不清楚的显示的代码,你必须阅读整个算法看看。有时程序员编写这样的假设与注释,并assetion是更好的技术。
三.断言是有条件的。它应该总是正确的。如果它失败了,程序员犯了一个错误。
4,断言可以用作通信和调试的助手。通信:它帮助程序员读取代码的假设。调试:帮助程序员找到bug,并在最近的地方捕捉bug。
5,断言不会改变程序的任何行为。
6,断言值:帮助程序员理解代码正确运行的必要条件。
7,建议将提取方法用作断言的条件公式。为了一些重复的代码提取到同一个函数,它可能只是为了更清晰的条件句的使用说明。
总结
在这一章中,我更喜欢用常规条款中常用的保护子句来代替嵌套条件句,有些人称这种方式为从句。
另一个是我经常调试var_dump()或()print_r PHP开发,我也第一次发现有一个断言PHP。
在学习和实践的过程中,我也学到了很多很好的方法,但我认为在一个团队中,有时候是全局性的,要根据团队的习惯进行编码,或者你可以与团队沟通交流,然后在大家的认可下,在这里使用,这样我们彼此在阅读代码和调试时就更方便了。