人孰无过,神亦容之,我们坦诚代码状态,因为它永不完美。
首先借用5S哲学——整理,整顿,清楚,清洁,身美
大抵到第五个境界的,没多少人了。clean code 永无止境
什么是整洁的代码,整洁的代码简单直接,整洁的代码如同优美的散文。整洁的代码从不隐藏设计者的意图,充满了干净利落的抽象和直截了当的控制语句。整洁的代码只做好一件事。
一,变量的命名(有意义的命名)——言道意到,意到言到
1,名副其实
2,避免误导
var a = 1; if(o == 1) {a = o;} else{a = 0;} //0 与o,1与l完全分辨不出来,这样有什么意义?
3,做有意义的区分
var a1; var a2;//请问你想定义的是什么?
4,使用众人周知的,可搜索的,读的出来的名称,不要使用俚语或双关语,避免思维惯性,不应该让读者在脑中把你的名词翻译为他们熟知的名词或者干脆不知道是什么。
5,添加有意义的语境
var addFirstName; var addList;//增加前缀提供语境,不要提供没用的语境
二,函数
1,短小
函数的第一规则是短小,第二规则还是短小
if else while 等语句代码块应该只有一行,并且大多数应该是调用语句。这样不但可以保持函数短小,而且调用语句一般都有描述性的语句,易于阅读和理解。
2,只做好一件事,并使用描述性的名称(不要怕长)
我们要判断一个函数是否只做一件事,很简单,看他是否能拆出另一个函数来。
//某一段代码 function find_same_barcode_add_to_new_inputs(i) { for(var j = 0; j < item.length; j ++) { if(inputs[i] == item[j].barcode) { new_inputs.push(item[j]); } } }//很明显,我们可以给他拆分出另外一个函数 function find_same_barcode_add_to_new_inputs(i) { for(var j = 0; j < item.length; j ++) { compare_barcode(inputs,i,item,j,new_inputs); } } function compare_barcode(i,j) { if(inputs[i] == item[j].barcode) { new_inputs.push(item[j]); } }//我们大致可以知道它做了什么:通过比较相同的barcode来将item中的内容添加到new_inputs中
不要害怕长名称,长而具有描述性的名称,要比短而费解的名称好
3,每个函数一个抽象等级
函数中混杂这不同等级的抽象等级,对与读它的人是一种折磨
4,函数的参数
最理想的参数数量是一,其次是二,尽量避免三参数的函数
首先,参数不易对付,他们具有太多的概念性,其次,从测试的角度看,参数更教人为难
要编写能确保参数各种组合运行正常的测试用例,很困难,若没有参数,很简单,有一个,也不太困难,有两个参数,就麻烦很多了,如果参数多于两个,测试覆盖的所有可能值会令人生畏
大师级的程序员把系统当作故事来讲,而不是当作程序来写。他们使用选定编程语言提供的工具构建一种更为丰富且更具表达力的语言,用来讲那个故事。