分页

代码的组织?回到最小单位一个文件,里面就两个标准——列数和行数。我们当然可以只写一行或全堆到一个文件,可这种超长的单一维度,虽是低级机器的最爱,却是高级人类的灾难。代码是人类语言,理解代码的是人类。所以,我们要将之分割成一个个小的单文件,且要控制列数和行数,以增加其可读性,同时提高其可维护性。[1]

ES6 Modules 的 exportimport,看起来很新颖,可其实只是 JavaScript 从网页脚本语言走向通用编程语言的一步。横向来说,这也并不新颖。更甚,类比到纸质书,我们早就对其分页习以为常,而其不也是将连续文字物理分割到不同纸面上。JavaScript,方兴未艾,Web,长路漫漫。

回到代码组织,上面讲的只是一个方面,即物理空间上的组织,并没有考虑到另一个方面——逻辑——也可以说我们上面只是将代码作为未解析的纯文本来看待,实现在空间上机械式的无差别切割分页。回到逻辑,两个方面:单文件内的上下前后逻辑(顺序逻辑),单文件外的功能类型逻辑(关系逻辑)。类比到纸质书,也就是文字的先后逻辑,章节的组织逻辑[2]

题外话,上面这个类比,视角(主体)是代码,我们也能反过来以文字为主体类比到代码,比如:文字左右交换(或行段上下交换)后,你读起来会感到满头雾水吗?那文件内的代码呢?以及文件外的文件们呢?第二点是一个有趣的结论:即书本的成书最基础条件却是软件开发的最高成就——一以贯之。

题外话,JavaScript 为什么会兴起呢?TypeScript 为什么会诞生呢?因为程序猿的高级退化——爱机器;因为 Web 的兴起,通俗点,就是互联网时代,而其也不过才刚到而立之年。


  1. 当然,抛开可读性不说,分割的另一个出发点——模块化以提高复用(通过分割增加一维度来实现),分割的另一个好处——空间解耦(以同一文件内为耦合)以降低 Debug 的复杂程度,避免问题打结成线团。 ↩︎

  2. 再延伸一下,以书本为单位(对象),也可以称为书本间的分类逻辑(类)。 ↩︎