gpt4 book ai didi

oop - 反if目的: How to check nulls?

转载 作者:行者123 更新时间:2023-12-02 07:49:36 24 4
gpt4 key购买 nike

我最近听说the anti-if campaign一些 OOP 大师努力编写不使用 if 的代码,而是使用多态性。我只是不明白它应该如何工作,我的意思是,它应该如何始终工作。

我已经使用了多态性(不知道反 if 事件),所以,我对“坏”和“危险”的 if 很好奇,我去看了我的代码(Java/Swift/Objective-C)看看我用得最多的地方,看起来是这些情况:

  1. 检查空值。这是我使用 if 的最常见情况。如果一个值可能为空,我必须以正确的方式管理它。要使用它,我必须检查它是否不为空。我不明白多态性如何在没有 if 的情况下弥补这一点。
  2. 检查值是否正确。我将在这里举一个例子:假设我有一个登录/注册应用程序。我想检查用户是否确实写了密码,或者密码是否超过 5 个字符。如果没有 if/switchs 怎么可能完成呢?再说一次,这不是类型的问题,而是值的问题。
  3. (可选)检查错误。可选,因为它类似于关于正确值的第 2 点。如果我在 block /闭包中得到一个值或一个错误(作为参数传递),如果我无法检查它是否为空,我该如何处理错误对象?

如果您了解有关此事件的更多信息,请在其范围内回答。我要求这是为了了解他们的目的以及如何有效地实现他们所说的。

所以,我知道根本不使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com