水人叹曰:
吾在家要打扫祭坛,出门要练怪抗血,现在又要我做研究编程序。连写带调一整天,bug总是不见少。老大,写程序这活真不是召唤物干的 AM曰:编程有那么难吗? 水人叹曰: 代码太长兮,吾无手指; 代码太多兮,敲不过来; 召唤时间快到兮,吾要消失 AM曰: 写代码如写文章。写文章的目的是为了让别人理解你的思想,写代码的目的是为了让计算机理解你的思想。同样写一个主题的文章,虽然都语法正确,没有错字,但A君惜墨如金却条理清晰;B君又臭又长但不知所云。 水人和曰: 是啊,同样编一个算法,虽然都语法正确,编译通过,但血法哥代码简短、结构清晰、既便于理解又便于调试;山丘哥却代码冗长、逻辑混乱,既难于理解又bug不断。我就奇怪了,同样是写程序的,写出的代码差距咋就这么大呢?尤其是想到山丘还要多敲那么多代码,却达不到血法的效果,难道天道不酬勤了吗? AM曰: 要想回答这个问题,首先要搞清啥是好的代码,啥是不好的代码? 水人问曰: 何谓好代码?何谓坏代码? AM反问: 程序由何组成? 水人答: 程序由函数组成,函数由语句实现,回答完毕 AM再问: 没有好函数可否有好程序? 水人曰: 不可 AM曰: 是故要有好程序,必先有好函数 水人又问曰: 何谓好函数? AM答曰: 好函数有三标准 水人追问: 标准一为何? AM答曰: 好函数必先为短函数,实现一功能,语句越少越好 水人又又问曰: How short is good? AM答曰: no more than one screen 水人又又又问曰: why? AM答曰: 超过一屏,读完整个函数的代码需要上下滚屏,滚屏则易打乱思路,是故一屏为宜 水人笑曰: AM谬矣!吾有一算法,功能要求众多,逻辑结构复杂,如何能用一屏完成。 AM答曰: 须功能分解,提取子函数,将原来一个行数多的函数实现的复杂功能分散到到若干行数少的子函数中实现。各子函数实现的都是简单逻辑,函数组合共同实现复杂功能。 水人曰: 善哉,“一屏一函数”之目的实际是提醒程序员主动提取子函数,进行功能分解,从而实现功能模块化。 AM曰: 孺子可教 |