- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近听说the anti-if campaign一些 OOP 大师努力编写不使用 if 的代码,而是使用多态性。我只是不明白它应该如何工作,我的意思是,它应该如何始终工作。
我已经使用了多态性(不知道反 if 事件),所以,我对“坏”和“危险”的 if 很好奇,我去看了我的代码(Java/Swift/Objective-C)看看我用得最多的地方,看起来是这些情况:
如果您了解有关此事件的更多信息,请在其范围内回答。我要求这是为了了解他们的目的以及如何有效地实现他们所说的。
所以,我知道根本不使用 if 可能不是最明智的想法,而只是询问是否以及如何在 OOP 程序中有效地完成它。
最佳答案
您永远无法完全摆脱 if
,但您可以最大限度地减少它们。
关于空值检查,否则返回空值的方法可以返回 Null Object相反,一个对象不代表真实值,但实现了一些与真实值相同的行为。它的调用者可以只调用 Null 对象上的方法,而不用检查它是否为 null。方法内可能仍然有一个 if
,但调用者中不需要有任何内容。
关于正确值检查,最好的方法是防止使用不正确的属性实例化对象。然后,该对象的所有用户都可以确信他们不必检查该对象的属性即可使用它。类似地,如果一个对象可以具有有效或无效的属性,则它可以通过提供对当前属性值执行正确操作的高级方法来向用户隐藏该属性。同样,对象内部仍然有一个 if
,但调用者中不需要有任何一个。
关于错误检查,有几种策略比返回调用者可能忘记检查的可能为空的错误值更好。其中之一是提出异常(exception)。另一种方法是返回一个可以保存结果或错误的类型的对象,并提供类型安全、if
-free 的方法来在适当的时候对任一结果进行操作,如 Java 的 Optional
或 Haskell 的也许
。
另请注意,case
语句只是连接的 if
(事实上,我会在事件的主页上使用 switch
编写代码) code> 而不是 if
/else if
),并且还有一些模式用多态性替换 case
,例如 the Strategy pattern .
关于oop - 反if目的: How to check nulls?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37488491/
我是一名优秀的程序员,十分优秀!