- 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