`
biqing0427
  • 浏览: 57033 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

简化条件表达式(Simplifying Conditional Expressions)

阅读更多

1、Decompose Conditional(分解条件式)

  • 从IF、THEN、ELSE三个段落中分别提炼出独立函数。
  • 在带有复杂条件逻辑的函数中,代码(包括检查条件分支的代码和真正实现功能的代码)会告诉你发生的事,但常常让你异不清楚为什么会发生这样的写,这就说明代码的可读性的确大大降低了。
  • 你可以将它分解为多个独立函数。根据每个小块代码的用途,为分解而得的新函数命名。并将原函数中对应的代码替换为(对新建函数的调用),从而更清楚的表达意图。
  • 对于条件逻辑,将每个分支条件分解,形成新函数。

2、Consolidate Conditional Expression

  • 检查条件各不相同,但最终行为一致,使用LOGICAL-AND和lLOGICAL-OR将它们合并为一个条件式。
  • 如果条件彼此独立,不要合并。
  • 合并后的条件实际上只有一次条件检查,只不过有数个并列条件需要检查而已。

3、Consolidate Duplicate Conditional Fragments(合并重复的条件片段)

  • 在条件式的每个分支上有相同的一段代码,将这段代码搬移到条件式之外。
  • 对待异常:如果在TRY区段内可能引发异常的语句之后,以及所有CATCH区段之内,都重复执行了同一段代码,就可以将这段
  • 重复代码移到FINAL区段。

4、Remove Control Flay(移除控制标记)

  • 以BREAK语句或RETURN语句取代控制标记。
  • 在支持BREAK和CONTINUE语句的编程语言中,通常也优先考虑RETURN。

5、Replace Nested Conditional With Guard Clanses

  • 条件式两种:1、所有分支都属于正常行为。2、条件式提供的答案中只有一种是正常行为。
  • 如果两条分支都是正常行为,就使用IF......ELSE。
  • 如果某个条件极其罕见,就应该单独检查该条件,并在该条件为真时立刻从函数中返回。
  • 这种有违于“单一入口单一出口”原则,但保持代码清晰才时最关键。

6、Replace Conditional With Polymrphism    以多态取代条件式

  • 对于条件式,根据对象型别的不同而选择不同的行为,将每个分支放进一个subclass覆写函数,将原函数声明为抽象函数。   
  • 如果需要在对象创建好之后修改TYPE CODE,就只能使用STATE/STRATEGY。 
  • 建立继承结构:1、REPLACE TYPE CODE WITH SUBCLASSES。2、REPLACE TYPE CODE WITH STATE/STRATEGY。

7、Introduce Null Object(引入NULL对象)

  • 将NULL VALUE(无效值)替换为NULL OBJECT(无效物)。
  • NULL OBJECTS一定是常量,它们的任何成分都不会发生变化,因此可以使用SINGLETON模式。
  • 为SOURCE CLASS建立一个SUBCLASS为NULL,都有ISNLL()函数,或者建立一个NULLABLE接口,将ISNULL()函数改在其中,SOURCE CLASS实现这个接口。
  • 只有不多数代码都要求NULL OBJECT作出相同响应时,才将行为移到NULL OBJECT中,使用缺省NULL行为。
  • 定义一个NULL接口,什么也不做,NULL OBJEC实现NULL接口,用INSTANCEOF检查是否为空,如:
interface Null{};
class NullObject extends CommonObject implements Null----
aObject instanceOf Null

        好处:不需要修改COMMON OBJECT,无法修改CUSTOMER源码情况下。

  • SPECIAL CASE 模式:包括NULL OBJECT,价值:降低你的错误处理开销。

8.Introduce Assertion(引入断言)

  • 以ASSERTION明确表现这种假设。
  • ASSERTION是一个条件式,应该总是为真。如果失败,表示程序员犯了错误,导致一个UNCHECKED EXPECTION.
  • 不要滥用ASSERTIONS,只使用他来检查一定必须为真的条件。
  • 如果ASSERTIONS所提示的约束条件不能满足,代码仍可以正常运行,就去掉ASSERTIONS。

 

 

 

 

分享到:
评论

相关推荐

    重构_改善既有代码的设计

    第 9 章:简化条件表达式(Simplifying Conditional Expressions) 第 10 章:简化函数调用(Making Method Calls Simpler) 第 11 章:处理概括关系(Dealing with Generalization) 第 12 章:大型重构...

    Refactoring

    The heart of the book is a catalog of refactorings, organized in chapters on composing methods, moving features between objects, organizing data, simplifying conditional expressions, and dealing with...

    matlab开发-象征性的.zip.zip

    5. **简化表达式(Simplifying Expressions)** `simplify`函数可以尝试将表达式化简为最简单的形式。例如,`simplifiedExpr = simplify(expr)`。 6. **解方程(Solving Equations)** 使用`solve`函数可以求解...

    重构-改善既有代码的设计+中文版

    Chapter 9:Simplifying Conditional Expressions 简化条件语句   Decompose Conditional 分解条件语句   Consolidate Conditional Expression 合并条件语句   Consolidate Duplicate Conditional Fragments ...

    重构——改善既有代码的设计

    Chapter 9:Simplifying Conditional Expressions 简化条件语句   Decompose Conditional 分解条件语句   Consolidate Conditional Expression 合并条件语句   Consolidate Duplicate Conditional Fragments ...

    重构-改善既有代码的设计(中文版)

    Chapter 9:Simplifying Conditional Expressions 简化条件语句   Decompose Conditional 分解条件语句   Consolidate Conditional Expression 合并条件语句   Consolidate Duplicate Conditional Fragments ...

    重构,改善既有代码的设计

    Chapter 9:Simplifying Conditional Expressions 简化条件语句   Decompose Conditional 分解条件语句   Consolidate Conditional Expression 合并条件语句   Consolidate Duplicate Conditional ...

    重构 改善既有代码的设计

    Chapter 9:Simplifying Conditional Expressions 简化条件语句   Decompose Conditional 分解条件语句   Consolidate Conditional Expression 合并条件语句   Consolidate Duplicate Conditional ...

    算术表达 式求值

    对于复杂表达式,还可以进行优化,如常量折叠(evaluating constant sub-expressions),表达式重写(simplifying expressions, e.g., `a + 0` to `a`),以及操作符优先级提升(e.g., `a * b + c * d` to `(a * b) ...

    Simplifying.JavaScript.2018.4。epub

    Simplifying.JavaScript.2018.4Simplifying.JavaScript.2018.4Simplifying.JavaScript.2018.4

    MATLAB Linear Algebra(PACKT,2014)

    MATLAB Linear Algebra ... Methods for manipulating and simplifying algebraic expressions are covered and computational techniques for solving algebraic equations and systems of equations are detailed.

    Simplifying JavaScript 2018

    学习最新javascript 的好书 This book is for anyone who has a little programming experience. It helps to have some JavaScript experience, but that’s not strictly necessary. I’ll assume ...

    Python-SimplifyingGraphConvolutionalNetworks论文的官方实现

    总结,"Simplifying Graph Convolutional Networks"通过简化GCN,提供了一个更加实用的图神经网络模型。Python的实现让开发者能够快速地在实际问题中部署和调整这一模型,进一步推动了图学习在各种领域的应用。理解...

    简化

    "simplifying-main"可能是指简化Java程序的主入口点,即`main`方法。 Java的`main`方法是每个Java应用程序的起点,通常位于公共类中,并具有`public static void main(String[] args)`这样的签名。简化`main`方法的...

    Master Your 400G, Characterization and simplifying PAM4 testing

    随着高速网络技术的发展,400G网络已成为当前及...本文提供了一些关于如何简化PAM4测试流程和提高测试效率的指南,并且引用了Keysight Technologies公司的Steve Sekel的见解,为400G网络的特性化和测试提供专业指导。

    Simplifying a logic program using its consequences

    ### 使用逻辑程序的后果进行简化 #### 摘要与背景 本文主要探讨了如何通过逻辑程序的后果来简化逻辑程序。逻辑程序的后果是指一组一致的命题(或称为文字),这些命题在逻辑程序的每一个解答集中都是成立的。文章...

Global site tag (gtag.js) - Google Analytics