问题里这个例子体现了计算的一个本质问题,就是用数据结构的复杂度来换取代码的复杂度。
这个例子本身是 table-driven 的例子。如果 if-else 体现的是一张表,那就 explicitly 构建这张表。OOP 里的虚函数也体现了这个概念。
更复杂的例子是 compiler。不构建 AST 的 compiler 代码生成部分就比较复杂。构建 AST 的代码生成部分就相对简单。
既然很多人提到了复杂度,这里讲一下,本质复杂度(fundamental complexity)只能转移不能降低,但 accidental 复杂度可以降低。而 accidental 复杂度可以从下面的几个方面分析: