读《代码整洁之道》笔记一

读《代码整洁之道》笔记一

一、关于函数(1)

1.函数要尽可能短小
(代码行数不能超过20行,最多不超一个屏幕长度)
2.每个函数只能做一件事情,而且只能是同一层级的事情
(例如:打印输出的代码数据处理的代码就不应该在同一函数出现)

如何把多个函数串联起来?

向每个函数传参,在一个大函数里调用各个小函数,而不是直接在大函数里写相关的代码。

// 一个关于计算的例子
	int  a,b;	//两个数
	char yunSuanFu	//运算符
**************************************
	int yunSuan1(int a, int b, char yunSuanFu){
		switch(yunSuanFu){
			case '+': return a+b;break;
			default: reutrn a-b; 
		}
	}	
**************************************
/*yunSuan1();这个函数做了两件事,这里看起来虽然简单,但如果遇到代码比较长、功能比较复杂的函数,会显得很难看,如果添加新的运算规则,代码会显得更加长,应该拆分出来;*/
**************************************
	int jiaFa(int a, int b){
		return a+b;
	}
	int jianFa(int a, int b){
		return a-b;
	}
**************************************
};

如何判断函数是否只做一件事?

看看该函数里的代码能不能再拆分出一个更小的函数?
(不要顾虑传参的麻烦,这会对以后代码的修改、重构和功能的添加有很好的铺垫和贡献。)

参数传递

有多个参数传递真的很烦,函数最好是没有参数,一个还好,两个还行,三个还可容忍,多于三个就会感到很难堪,不仅要记住参数顺序,还要读懂传进去的参数有什么意义或作用,而且还不好测试。对于别的程序员来说要读懂你写的代码,就要花更多的时间了。
一、对于一个参数:
1.假设我们已经将函数改写成只做一件事,那么我们对函数名也要慎重考虑一下,例如:

 void writeName(string Name);
 void write(string Name);

第一个就比第二个函数表达的意思清晰

二、对于两个参数:
1.改变函数名,以区分参数顺序,例如上面的运算的函数

int a_Jia_b (int a, int b){
	return a+b;
}
int a_jian_b (int a, int b){
	return a-b;
}

2.参数应该尽量少,但对于某些有确切意义的函数,就应该使用两个参数

point(0,0);
point(p);

在直角坐标系中,使用第一个函数会比第二个好。

三、对于多个参数
1.可以考虑创建一个类,将其封装起来,当然这个类要有实际意义,例如:链表的每个节点可以封装为一个类,树的每个结点也可封装为一个类。

2.如果不仅仅是判断操作,多个参数中尽量不要传递标识参数(bool)
这会表明函数不仅仅在做一件事情(是错还是对?错了执行···,对了执行···)

3.多个参数要仔细考虑

你可能感兴趣的:(读书)