Don't Repeat YourSelf (DRY)

在写双向链表的打印,求和,找出最大数的时候,很明显,都是需要遍历的,因此,可以使用函数回调的方法,写一个遍历函数,留一个回调参数,呵呵,增强了代码的灵活性啊。

 

1.不要编写重复的代码。

有很多问题:

        a.虽然重复的代码很容易写,但是更容易出错。使用相类似的代码,我们更容选择使用“CV”,但是这样很容易犯一些细节上的错误,如果某个地方修改不完整,就容易留下定时炸弹!

        b.重复的代码经不起变化。无论是修改BUG,还是增加新的特性,需要修改很多地方,忘掉一个地方就要付出很多代价 ……一个BUG动全身啊……

 

因此,要学会抽取重复的代码,需要思考,需要精力和耐心。

 

2.任何回调函数都要有上下文。

 

typedef DListRet (*DlistDataPringFunc)(void *ctx,void* data);

 

DListRet dlist_foreach(
DList*
 thiz,
 DListVisitFunc visit,
 void
*
 ctx)

{
DListRet ret = DLIST_RET_OK;
DListNode* iter = thiz-> first;
 
while ( iter != NULL && ret != DLIST_RET_STOP)
{
ret = visit( ctx, iter-> data) ;
 
iter = iter-> next;
}
 
return ret;
}

static DListRet sum_cb( void * ctx, void * data)
{
long long * result = ctx;
* result += ( int ) data;
 
return DLIST_RET_OK;
}

实现了加和功能。

 

注意,以后在使用回调函数的时候,要保留一个上下文参数,ctx,这样在不停进出回调函数的时候,就能避免使用全局变量。

 

3.只做份内事。

也就是说,模块功能不是想添就添的,而是根据真正的需要,高内聚,低耦合,清晰明了,呵呵,一个函数100行以内~~

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值