🙈

Declarative vs Imperative

在看文档时候发现有一句: LottieView can be used in a declarative way, 这里的 declarative 不明确是什么意思, 虽然通过查字典能够知道是直观的意思, 但还是不懂在 CS 领域它代表着什么.

于是我进行了一些查阅, 说一下自己的理解, talk is cheap, just show the code:

function foo() {
  const array = [1,2,3,4,5,6,7,8,9];
  const result = []
  for (const i of array) {
    if (i%2 === 0) {
      result.push(i);
    }
  }
  console.log(result)
}
foo()

上面的代码是取数组里面的偶数, 这种表达给没有开发经验的人来说, 是看不懂的. 所以替换成下面这种:

function foo() {
  const array = [1,2,3,4,5,6,7,8,9];
  const result = array.filter(i => i%2 === 0);
  console.log(result)
}
foo()

这样就明显多了, 数组, 过滤, 条件, 结果, 无开发经验的人也能看懂.

因此可以得出, 直观明显的就是 declarative, 而第一种代码方式是拐弯抹角的 imperative.

所以可以说函数式编程(FF)是比较直观的, FF is declarative. 而 OO 可以代表比较复杂且难以理解的 imperative.

综上所述, LottieView can be used in a declarative way 这句话可以这么理解: LottieView 使用起来很方便. 并不需要表达它 直观的 这层意思.

ps. 遇到难以理解的词汇, 直接搜索查看翻译也是很难理解的. 不如换一个方式: 搜图! 我们从生下来不会说话不懂任何事情, 是先靠眼睛来学习这个世界的, 毕竟眼睛是感官里最重要的部件. 用图来理解, 这本身也是一个 declarative way, 而阅读大量故事和讲解来理解一个词汇, 这就挺 imperative 的.


在我们一生中,命运赐予我们每个人三个导师,三个朋友,三名敌人,三个挚爱。但这十二人总是不以真面目示人,总要等到我们爱上他们、离开他们、或与他们对抗时,才能知道他们是其中哪种角色。