“超级实用!优化你的代码风格,让你的代码更优雅更有吸引力”

文章讨论了代码优化的重要性,引用了JoshuaBloch和GradyBooch的观点,强调了编程的几个基本原则,如单一功能原则、开闭原则、里氏替换原则、接口隔离原则和依赖反转原则。作者提出了两个优化建议:一是使用结构体处理多个参数,提高代码可读性;二是明智地管理内存,例如使用动态分配减少数组的内存浪费。文章旨在帮助初学者理解和实践代码优化。
摘要由CSDN通过智能技术生成

背景:笔者在大学期间写过不少的代码,但因为没有好的指导者导致养成了代码散漫的习惯,进入工作后因这个习惯吃了不少的亏,故想总结一篇较为实用且在工作中经常会用到的一些优化方案,和代码编写的原则,给初入门的学者们一些帮助。 

正如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(&params);
    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方法;

以上是一些经验总结,以后会持续更新,不足之处请多多指教。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值