写代码的过程使用一种语言描述一个系统故事。
写的过程,保持代码的精确,清晰,是能讲好故事的基础。
函数,即方法名,是一个动词。
1.短小
函数体应该保持短小,最好每个函数体的封顶上限应该是20行。
2.if/else while等语句中
块内尽量调用“有意义签名”的函数,意味着函数不应该有嵌套结构,缩进不应该多与一层或两层。
3.只做一件事
函数中的语句,应该是一抽象层使用几条指令处理或者使用下层抽象进行处理。一个只做一件事的函数,无法很合理的切分成几个部分立即。
举个例子
睡觉(){躺床上();闭眼();}
起床(){睁眼();下床();}
睡觉中,如果还含有起床这一个函数,就违反了,只做一件事的原则。
因为睡觉和起床是处于一个抽象层的东西。
另外如果闭眼中含有躺床上的函数实现,也违反了只做一件事的原则。
因为闭眼和躺床上也是处于一个抽象层的东西。
可以使用To来进行判断函数是否只做一件事。
To 目的(睡觉),应该先进行函数(躺床上),然后进行函数(闭眼)。
To 目的(躺床上),应该进行函数(…)
To目的(闭眼),应该进行函数(…)
满足向下规则:自定向下的阅读顺序
函数{函数1;函数2;}
函数1{函数①;函数②;}
函数①{函数Ⅰ;函数Ⅱ;}
…
函数2{函数③;函数④;}
函数③{函数Ⅲ;函数Ⅳ;}
…
函数1中不能包含函数2的实现…
4.switch,switch能够使用情况应该是配合enum来使用,来重写多个if else的情况。并且switch天生就是用来做多件事情的。能避免使用就避免使用。
有些switch情况是可以使用多态实现的就是用多态实现。
5.使用具有描述性的名称
长而具有描述的名称,要比短而令人费解的名称好。长而具有描述性的名称,要比描述性的长注释好。使用命名约定也是团队开发中必不可少的。
命名方式要保持一致,使用与模块一脉相承的短语、名词和动词来给函数命名。
6.函数参数
理想的情况是无参,其次是一,再次是二,避免使用三个参数及以上
参数是带有概念性的东西。避免使用输出参数,输出参数使用返回值代替。
一元函数:
一个函数传入一个参数,对这个参数有两种常用的用途,进行询问,或者进行操作。
当然使用delegate,作为参数的时候,或者函数作为事件的处理方法时,参数的使用例外。
避免使用bool作为参数传进去
例如:
func(bool){ if (bool){function①;}else {function②;}}应该把这个func拆成function① function②根据bool 进行选择判断
二元函数:除了必要否则,尽量使用一些机制将其转换成一元函数。
三元函数:标识参数中有一些参数可以封装成一个类,在当成参数传进来。
一个参数的使用动词+名词
多个参数的 使用动词+名词+(动词/介词)+名词的形式
7.操作与询问,应该分开
8.错误代码交予异常处理
9.异常处理应该从函数主体部分抽离处理,另外形成函数
异常处理也是一件事。
10.重复使用的指令,应该使用函数封装起来,进行复用。
11.避免使用goto