Friday, August 3, 2018

Conditionals v.s. Rules Engine

在 Rich Hickey 的 Simple Made Easy 這個演說中,他講了幾句有關「條件判斷」的話:

  • Conditionals are complex in interesting ways, and rules can be simpler. 
  • You can get rule systems in libraries, or you can use languages like Prolog.


首先,我本來考慮要直接研究 Prolog ,不過,Prolog 並沒有很容易學,畢竟是個不同 paradigm 的程式語言。但是查了一陣子 Prolog 的資料之後,也有想出一些有趣的東西:

比方說,Prolog 這種語言的核心是 unification,除了可以實現 rules engine 之外,還可以用於 data validation 和 data extraction, data transformation 。 想了一想之後,我想到了一件事:寫 validation 時,使用的 JSON Schema ,其實也可以視為是 rule 。

後來,我從 rules engine 的角度去查資料,這回查到的 library 就很有啟發。 json-rules-engine ,就可以讓 nodejs 可以使用類似 Prolog 的能力。

仔細想想,本來直接寫在 if 裡頭的條件判斷 (conditionals) ,被用 rules engine 這種「增加一層抽象層」的方式改寫,程式就會變得更有彈性 (flexibility) 。這又是再一次地應証了那句老話:

You can solve every problem with another level of indirection