最近社区有个很火的向代码致敬, 寻找你的第 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
来源: https://yq.aliyun.com/articles/591113