背景:笔者在大学期间写过不少的代码,但因为没有好的指导者导致养成了代码散漫的习惯,进入工作后因这个习惯吃了不少的亏,故想总结一篇较为实用且在工作中经常会用到的一些优化方案,和代码编写的原则,给初入门的学者们一些帮助。
正如Google公司首席架构师Joshua Bloch所提到的:
编程不仅仅是让程序运行而已;编程是创造一个易于理解的,可以维护的,高效的作品
而UML创始人Grady Booch也提到:
整洁的代码简单直接。整洁的代码如同优美的散文。整洁的代码从不隐藏设计者的意图,充满了干净利落的抽象和直截了当的控制语句。
在代码的编写中应该谨记:
【单一功能原则】
对象应该仅具有一种单一功能。
【开闭原则】
提供给外部的基类/接口,是不允许被修改的,你可以继承/组合去使用它扩展它,但不能修改它
【里氏替换原则】
在一个软件系统中,子类应该可以替换任何基类能够出现的地方,并且经过替换以后,代码还能正常工作
【接口隔离原则】
过多的接口,暴露给客户,不如只提供给客户所需要的接口。从而简化逻辑
【依赖反转原则】
不同的模块,应该依赖于抽象,而不应该依赖于实例。
就比如:
int params(int a, char* b, bool c, int d , char e)
{
xxxxxx
}
int main()
{
params(1,"string",true,2,"d");
return 0;
}
这样写的代码虽然看着复杂度不高,但是实际的代码中参数很有可能是各种类的ENUM,和结构体这样的话,后续代码的复杂将会非常的臃肿。
struct List {
int a;
char* b;
bool c;
int d;
char e;
}
int process(struct List* params)
{
xxxxxx
}
int main()
{
List params = {1,"string",false,1,"e"};
process(¶ms);
return 0;
}
这样写的代码虽然第一时间看起来代码反而会更加多点,但当参数复杂起来,这样写出来会更加的容易理解和阅读,总体看起来会更加优雅一些。
优化二
如何存储多数据的队列,提起数组数据的存储我们往往用数组,或是对象数组的方法来进行存储的,但这种方法并不是最优的解决方案,身为开发者,应尽力的去思考节省内存开销。
class MENU_LIST_PARAM
{
public:
int chain;
int link;
char* title = new char[16*4+1];
char* description = new char[64*4+1];
void* currentValue;
};
MENU_LIST_PARAM *pList = (MENU_LIST_PARAM*)allocate(sizeof(MENU_LIST_PARAM) * noOf);
deallcoate(pList);
内存生成完之后要记着判断一下是否生成,在使用完之后要进行一次释放,因为生成的是内存块,所以使用deallocate方法;
以上是一些经验总结,以后会持续更新,不足之处请多多指教。