形式重要吗?

今天看到一篇关于20行代码的文章,说到JS圈子里有一项赛事,就是在20行代码中写出尽可能丰富的效果来。当然,类似的事情在种种语言中都有,不惟JS。

于是一时兴起,打算把Qomo写出个20行的版本来。是啊,如果Qomo可以写成20行,将是何等快意啊?于是就动手写了写。写之前,看了别个的一些20行,大意是声明语句可记为一行,连续表达式可以记为一行,又则,函数声明按内部的行数来记行……

于是动手写吧。写了三数行,便觉得不对了。仅为了增减行数,再复杂的功能在JS里也写得成一行(当然这有点夸张)。例如说Qomo的Class()函数原本是有27行的, 去掉空行和注释剩下10行。如果把语句后的分号换作逗号,就变成了连续表达式运算,则其中的8句可算作一句。最后

就剩下了一个var变量声明,和一个return返回子句(将所有的表达式运算连在return之后,它就只返回最后一个表达式值了)。

现在剩下两行,一个是用来声明变量的,一个是用来返回值的。若讲点技巧,再把变量声明换成函数的形式参数就好了——尽管这实际上并不是好习惯。现在就只剩一行了。而这一行在JS里面,也可以变成“声明即使用”函数,也可以是一个表达式的运算元,所以它放在更大范围里面去,也就一行也不是了。我们最终写出来的代码形式上就是这样(这仍只能算成运算元,1行语句都算不上):

x + (function(X,Y,Z){
  return A,B,C,D,E
}()) + y

出了什么问题?

20行真的重要么?对于一个玩弄技巧的人来说,20行和1行,以及和0行都没什么区别。真正写到一定程度,代码的行数就成了玩物,就成了虚无。我们写代码不是给计数的机器用的,我们是写给别人看的。我们的目的是要别人理解这份代码,以便让代码生存下去,活下去,活在除开我们自己的另一个群体中去。仅有如此,“写代码”才有意义。

没有几个人是高手,也没有几个人是玩技巧的票友。真正的高人要从自得中走出来,变成它得,变成别人看得见的得。仅仅是玩玩自娱自乐的技术技巧,便是死物一个。

有个有趣的、出自禅学的问题:双手相叩出音声,只手音声如何闻?这个问题放在禅学环境里,是有解的。音声自得,你自己听得便是听得了。换句话说,你自娱自乐的境界里,还是听得到这“只手音声”的。

但上面这个禅学的问题还有下半段:你若闻得只手声,如何令我也闻?我读到这后半个问题时,心下凌然、危然、大惧。因为这个问题是何等普遍啊:高手们自娱自乐,自曲自歌。他们听得见每一个非出自自然的、器械的音符,仿佛他们具有神性一般。

然而,不过是死物一个。如何让别人听得呢?

代码写到上面那种地步,无怪乎LISP几十年来也成不了主流,无怪乎Erlang令人望而生畏(尽管它已经比LISP好了许许多多)。形式对于一个高手来说确实不重要,但高手若不能“让人听得”,那仍不过是死物。化而用之,从无形而有形,形质俱现,才能还本来面目。

本来面目,还是有面目的。