半构造对象是不必要的

主要观点:

  • 函数式编程语言有不可变对象,如 Haskell、Erlang 等,讨论的是 100%不可变语言,其中突变被消除。
  • 不可变对象创建后不可更改,创建复合值前需集齐相关组件。
  • 可变语言无需此规则,容易出现未初始化或无效对象。
  • 函数式程序员抱怨常规命令式语言中的 nil/null 值会导致程序崩溃,而在 Go 中长时间未遇到 nil 指针异常,推测是因为遵循了一次构建有效对象的原则。
  • 区分 null 值的不是其无效性,而是无法从编程语言认为有效的值中删除。
  • 不构建无效数据可避免程序中的无效数据,强类型函数式语言能很好地做到,命令式语言也有工具可用于此,但通常较弱。

关键信息:

  • 不可变对象特点及创建要求。
  • 可变语言与不可变语言在对象创建上的差异。
  • Go 中 nil 指针异常情况及推测原因。
  • 对 null 值的深入理解。
  • 构建有效对象对程序的重要性及实践难度。

重要细节:

  • 不可变对象创建后新对象可创建但旧对象不可更改,如创建复合值前需集齐所有相关组件。
  • 可变语言易出现未初始化或不符合特定定义的对象,且易在不经意间进入代码。
  • 在 Go 中虽长时间未遇 nil 指针异常,但仍需与常遇此问题的人对比研究原因。
  • null 值的特殊之处在于无法从编程语言的有效值中删除。
  • 实践中重构代码以避免半构建对象很困难,虽能理解其危害但难以解释,从新代码开始更好,重构现有代码有难度且可能是导致重构困难的主要因素之一。
阅读 8
0 条评论