忽然之间一点感悟, 从函数的角度分析, 面向对象是个坏东西

对象是个好东西

  1. 就是键值对
  2. 值可能是函数, 也就是说, 函数也是值
  3. 如果是lisp这类语言, 键可能也是函数

面向对象其中也有精华

  1. 类库的组织方式
  2. 代码module, 代码分层, 把分治机制发挥到了极致

但是总体而言, 面向对象是个糟糕的思路

我们从函数说起

  1. 第一等级的函数是纯函数, 也就是说, 输出完全依赖并且只依赖于输入, 但是这里要特别注意, 即便如此同样的输入也不一定产生同样的输出, 也就是说, 输入和输出并不是一一对应的, 例如取随机数的函数, 或者某个随机类算法的函数. 每次拿到的不一定是同一个结果.
  2. 函数依赖于内部/环境状态, 比如闭包, 比如自带缓存的函数.
  3. 函数依赖于数据库, 也就是函数要读取或者写入持久化数据.
  4. 函数依赖于内存/缓存…
  5. 函数依赖于其他函数的状态, 这种情况下, 其实就比较糟糕了, 调试和维护都会非常困难, 基本可以说是bug窝.

特别神奇的是, 面向对象其实批量制造的是第5级的函数….