1、提炼函数

 

定义:将代码提炼到一个独立的函数里,并以这段代码的用途为这个函数命名。

提炼的时机:将意图和实现分开

对于一段代码,你需要通过阅览才能搞懂这段代码在干什么,那么就需要将这段代码提炼到一个函数中,并为其所做的事命名。不用过于担心短函数会造成函数调用,因而影响性能。短函数常常能让编译器的优化性能运转更加良好,因而短函数可以更加容易地被缓存。

1.提炼函数无局部变量

typedef struct Person
{
    string name;
    int id;
}person;
void printStaff(person staff)
{
    cout<<"************"<<endl;
    cout<<"***STAFF****"<<endl;
    cout<<"************"<<endl;

    string Today="Monday";
    cout<<Today<<endl;

    cout<<"name:"<<staff.name<<endl;
    cout<<"id:"<<staff.id<<endl;
}

对于printStaff函数来说,里面的内容可以单独提炼出来

void printStaff(person staff)
{
    printBanner();

    printDay();

    cout<<"name:"<<staff.name<<endl;
    cout<<"id:"<<staff.id<<endl;
}
void printBanner()
{
    cout<<"************"<<endl;
    cout<<"***STAFF****"<<endl;
    cout<<"************"<<endl;
}
void printDay()
{
    string Today="Monday";
    cout<<Today<<endl;
}

2、有局部变量

被提炼代码只是读取这些变量的值,并不修改他们,这种情况可以简单地将他们当作参数传给目标函数。

void printStaff(person staff)
{
    printBanner();

    printDay();

    printData(staff);
}
void printBanner()
{
    cout<<"************"<<endl;
    cout<<"***STAFF****"<<endl;
    cout<<"************"<<endl;
}
void printDay()
{
    string Today="Monday";
    cout<<Today<<endl;
}
void printData(person staff)
{
    cout<<"name:"<<staff.name<<endl;
    cout<<"id:"<<staff.id<<endl;
}

若对局部变量再赋值,问题则变的复杂了

void printStaff(person staff)
{
	int num=0;
	printBanner();

	printDay();

	for(int i=0;i<100;i++)
		num+=i;

	printData(staff,num);
}
void printBanner()
{
	cout<<"************"<<endl;
	cout<<"***STAFF****"<<endl;
	cout<<"************"<<endl;
}
void printDay()
{
	string Today="Monday";
	cout<<Today<<endl;
}
void printData(person staff,int num)
{
	cout<<"name:"<<staff.name<<endl;
	cout<<"id:"<<staff.id<<endl;
	cout<<"num:"<<num<<endl;
}

将该局部变量的声明进行移到被提炼的代码段中

void printStaff(person staff)
{
	
	printBanner();

	printDay();

	int num=0;
	for(int i=0;i<100;i++)
		num+=i;

	printData(staff,num);
}

 然后把想要提炼的代码复制到目标函数中

void printStaff(person staff)
{
	
	printBanner();

	printDay();

	int num=calculateNum();

	printData(staff,num);
}

int calculateNum()
{
	int num=0;
	for(int i=0;i<100;i++)
		num+=i;
	return num;
}

然后将函数中的变量名改为更易理解的名称

int calculateNum()
{
	int result=0;
	for(int i=0;i<100;i++)
		result+=i;
	return result;
}

如果需要提炼函数返回多个值,可以构造一个对象进行返回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值