记录工作中遇到的小重构
void fun(const type &data, const type2 &data2, type3 &data3){
if(!data.present) return; //单独调用fun时候跟fun1和fun2等价,但是,present为真,下面的都不执行
int freq = 0;
int band = 0;
get_freq_from_data(freq, data);
get_band_from_data2(band, data2);
save_to_data3(req, band, data3);
}
重用上面的代码变成两个接口:
void implement(const type &data, const type2 &data2, int &req, int &band){
if(!data.present) return;
get_freq_from_data(freq, data);
get_band_from_data2(band, data2);
}
void fun1(const type &data, const type2 &data2, bigtype &t1){
int freq = 0;
int band = 0;
implement(data, data2, freq, band); //present为真时候,比fun函数多执行了save_to_bittype
save_to_bigtype(req, band, t1.data3);
}
void fun2(const type &data, const type &data2, bigtype &t2){
int freq = 0;
int band = 0;
implement(data, data2, freq, band);
save_to_bigtype(req, band, t1.data3); //present为真时候,比fun函数多执行了save_to_bittype
}
然后在两个流程里调用fun1和fun2; 上面重构有问题:拆分函数降低了return语句的覆盖范围
总结:重构函数时候,注意return,注意for循环