简单就是美

May 22, 2013 · One minute read

在度过和Go的蜜月期后,我开始写出了久违的面条函数。整个文件超过了600行,远远超过了我的Sublime Text的鸟瞰图范围。调试变得异常困难!其实根本就没有调试,在使用GoSublime插件后,我基本上恢复到了过去单靠打印语句调试的年代。于是问题也就发生了。

在重写一个Eclipse帮助系统建立TOC模块的时候,为了和EHS完美的兼容,需要过滤掉被深度引用、或者空的根节点。我先按照原先Java的版本,写了一个递归函数,检查每个TOC节点是否为空,但是结果造成了死机……好吧,很久没有写程序写到死机了。为了防止死循环,我把递归函数用宽度优先搜索的非递归队列模式写了一遍,还是不行。我又按照Clojure的风格,写成迭代器配合列表过滤,还试用了Go的函数式写法。结果还是不成功,代码是清晰许多,但是测试还是没有通过。最后回到了最原始直接的方法,对于每个TOC文件放一个变量,在解析的时候标志它是否包含任何可用链接,如果没有就是空,然后通过分析TOC引用关系,确定该TOC节点是否总体为空。

重写是一种很好反思现有系统的方式。通过重写成另外一种语言,程序员能够跳出原先的限制,或许可以想出更好的设计,但是风险也是并存的。任何时候多想想,选择最简单直接的方式也许才是最好的。