`
猫耳呀
  • 浏览: 165502 次
社区版块
存档分类
最新评论

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

阅读更多

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

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

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

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

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

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

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

现在,连 header 都显得如此整洁,只有 DoSomething() 这一个函数了。向代码致敬!

各位快来围观:https://yq.aliyun.com/roundtable/67516/?spm=a2c4e.11154000.rtdmain.4.393518a8tcY4xr&order=score#answer-146875 

其他社区网友这样晒码,大家快来围观点评吧

1、@故事老神仙-接触建站开始一直玩到了现在的一个网站代码的第83行,是一行普通的代码,没有特别的地方,但不由让自己想起了当初的那份热爱,那份期待,那是初接触代码的小惊喜小激动。
https://yq.aliyun.com/roundtable/67516#answer-146773

2、@黄一刀-我的83行代码是注释
https://yq.aliyun.com/roundtable/67516/?spm=a2c4e.11154000.rtdmain.115.438a18a844ewV0&order=score&type=&p=1#answer-146842

3、@微wx笑-十二年前写过一个流量统计,最近想把它改一改再用起来,随便打开一个类,没有任何注释,你们看得懂不?
https://yq.aliyun.com/roundtable/67516#answer-146527

4、@海洋的云-感觉确切来说应该是第83段,自从用了Jupyter Notebook,“代码行”就全部变成“代码段”了,/(ㄒoㄒ)/~~
https://yq.aliyun.com/roundtable/67516#answer-146546

5、@浮生递归-什么?居然暴露了自己的CSS命名不规范!不行,我得再贴段来证明下,有时候还是规范的~比如483行附近代码!
https://yq.aliyun.com/roundtable/67516#answer-146557

6、@gfriend_24-最初的代码片段(入门Android开发时的BMI计算程序代码)
https://yq.aliyun.com/roundtable/67516#answer-146498

7、@三忌-这是我12年写的代码……
https://yq.aliyun.com/roundtable/67516#answer-146590

8、@海阔天空yy-以下是我写的一个,用来测试redis集群的测试程序 https://yq.aliyun.com/roundtable/67516#answer-146532

9、@尼古拉斯雷-看了那个阿里巴巴的那个开发手册,然后就知道如何去优化这些代码,如何去规范的定义变量名之类的 
https://yq.aliyun.com/roundtable/67516#answer-146477

10、@黄道长-直接上代码
https://yq.aliyun.com/roundtable/67516/?spm=a2c4e.11154000.rtdmain.115.438a18a844ewV0&order=score&type=&p=1#answer-146845 

 

原文链接

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics