【晒出你的第83行代码】阿里研究员福贝,用一个小演示程序来解释一下 C++11/14 里的 closure 是可以多么的“爽”

最近社区有个很火的《向代码致敬,寻找你的第83行》的活动,缘起于前几天,在阿里巴巴的一个小黑屋里,5名对代码有着极致追求的程序员参与了阿里代码领域最高荣誉“多隆奖”最终角逐(多隆作为淘宝的第一代程序员,也是很多技术人心中的大神)。那天代码评审现场,看到某代码片段最后结尾,多隆突然补上一句,往上翻看下第83行。代码一般都是几百行,他看到最后,居然还记得第83行的一个细微瑕疵,这得是对代码怀着怎样的敬畏之心。

于是,在五四青年节之际,社区发起了来晒晒属于你的“第83行”的活动,活动中邀请业界的大牛、大神们来晒代码或者Review代码!第一波邀请的大神就是阿里研究员福贝。

我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,马上就要抢光了。

@技术福贝 晒出了如下代码:

我用一个小演示程序来解释一下 C++11/14 里的 closure 是可以多么的“爽” :-)

header

cpp

范例里面,我们要写的 DoSomething() 需要做两件事情,Calculate() 算出一个矩形的四个顶点,然后 DrawRect() 去画它。这样的情况在实际代码中很常见,一个函数因为复杂,要分几步去做,最好分成几个子函数。但是问题是需要传递好几个参数,头痛了!第一种写法,无奈之下只能把所有参数一一列出,然后 header 里就多了个 Calculate(......) 长长的子函数,需要传进传出多个变量。

有了 closure 就好办多了!我们可以在 DoSomething() 里直接定义 Calculate(), 用 [&] 把所有 variables on the stack 传进去。整个写法简洁很多,也易于维护,一方面参数的增删不再需要更多的工作,另一方面,更为重要的是,Calculate() 已经完全定义在 DoSomething() 里面了,从结构上直接告诉读者它们的从属关系!(NOTE: 当然也可以用一个 inner function 来写,可是参数传递不够爽)

原文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值