【晒出你的第83行代码】阿里研究员福贝,用一个小演示程序来解释一下 C++11/14 里的 closure 是可以多么的“爽”...
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
摘要:?在五四青年節(jié)之際,社區(qū)發(fā)起了來曬曬屬于你的“第83行”的活動(dòng),活動(dòng)中邀請(qǐng)業(yè)界的大牛、大神們來曬代碼或者Review代碼!第一波邀請(qǐng)的大神就是阿里研究員福貝。
最近社區(qū)有個(gè)很火的《向代碼致敬,尋找你的第83行》的活動(dòng),緣起于前幾天,在阿里巴巴的一個(gè)小黑屋里,5名對(duì)代碼有著極致追求的程序員參與了阿里代碼領(lǐng)域最高榮譽(yù)“多隆獎(jiǎng)”最終角逐(多隆作為淘寶的第一代程序員,也是很多技術(shù)人心中的大神)。那天代碼評(píng)審現(xiàn)場(chǎng),看到某代碼片段最后結(jié)尾,多隆突然補(bǔ)上一句,往上翻看下第83行。代碼一般都是幾百行,他看到最后,居然還記得第83行的一個(gè)細(xì)微瑕疵,這得是對(duì)代碼懷著怎樣的敬畏之心。
于是,在五四青年節(jié)之際,社區(qū)發(fā)起了來曬曬屬于你的“第83行”的活動(dòng),活動(dòng)中邀請(qǐng)業(yè)界的大牛、大神們來曬代碼或者Review代碼!第一波邀請(qǐng)的大神就是阿里研究員福貝。
@技術(shù)福貝?曬出了如下代碼:
我用一個(gè)小演示程序來解釋一下 C++11/14 里的 closure 是可以多么的“爽” :-)
范例里面,我們要寫的 DoSomething() 需要做兩件事情,Calculate() 算出一個(gè)矩形的四個(gè)頂點(diǎn),然后 DrawRect() 去畫它。這樣的情況在實(shí)際代碼中很常見,一個(gè)函數(shù)因?yàn)閺?fù)雜,要分幾步去做,最好分成幾個(gè)子函數(shù)。但是問題是需要傳遞好幾個(gè)參數(shù),頭痛了!第一種寫法,無奈之下只能把所有參數(shù)一一列出,然后 header 里就多了個(gè) Calculate(......) 長(zhǎng)長(zhǎng)的子函數(shù),需要傳進(jìn)傳出多個(gè)變量。
有了 closure 就好辦多了!我們可以在 DoSomething() 里直接定義 Calculate(), 用 [&] 把所有 variables on the stack 傳進(jìn)去。整個(gè)寫法簡(jiǎn)潔很多,也易于維護(hù),一方面參數(shù)的增刪不再需要更多的工作,另一方面,更為重要的是,Calculate() 已經(jīng)完全定義在 DoSomething() 里面了,從結(jié)構(gòu)上直接告訴讀者它們的從屬關(guān)系!(NOTE: 當(dāng)然也可以用一個(gè) inner function 來寫,可是參數(shù)傳遞不夠爽)
現(xiàn)在,連 header 都顯得如此整潔,只有 DoSomething() 這一個(gè)函數(shù)了。向代碼致敬!
各位快來圍觀:https://yq.aliyun.com/roundtable/67516/?spm=a2c4e.11154000.rtdmain.4.393518a8tcY4xr&order=score#answer-146875?
其他社區(qū)網(wǎng)友這樣曬碼,大家快來圍觀點(diǎn)評(píng)吧
1、@故事老神仙-接觸建站開始一直玩到了現(xiàn)在的一個(gè)網(wǎng)站代碼的第83行,是一行普通的代碼,沒有特別的地方,但不由讓自己想起了當(dāng)初的那份熱愛,那份期待,那是初接觸代碼的小驚喜小激動(dòng)。
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笑-十二年前寫過一個(gè)流量統(tǒng)計(jì),最近想把它改一改再用起來,隨便打開一個(gè)類,沒有任何注釋,你們看得懂不?
https://yq.aliyun.com/roundtable/67516#answer-146527
4、@海洋的云-感覺確切來說應(yīng)該是第83段,自從用了Jupyter Notebook,“代碼行”就全部變成“代碼段”了,/(ㄒoㄒ)/~~
https://yq.aliyun.com/roundtable/67516#answer-146546
5、@浮生遞歸-什么?居然暴露了自己的CSS命名不規(guī)范!不行,我得再貼段來證明下,有時(shí)候還是規(guī)范的~比如483行附近代碼!
https://yq.aliyun.com/roundtable/67516#answer-146557
6、@gfriend_24-最初的代碼片段(入門Android開發(fā)時(shí)的BMI計(jì)算程序代碼)
https://yq.aliyun.com/roundtable/67516#answer-146498
7、@三忌-這是我12年寫的代碼……
https://yq.aliyun.com/roundtable/67516#answer-146590
8、@海闊天空yy-以下是我寫的一個(gè),用來測(cè)試redis集群的測(cè)試程序?https://yq.aliyun.com/roundtable/67516#answer-146532
9、@尼古拉斯雷-看了那個(gè)阿里巴巴的那個(gè)開發(fā)手冊(cè),然后就知道如何去優(yōu)化這些代碼,如何去規(guī)范的定義變量名之類的?
https://yq.aliyun.com/roundtable/67516#answer-146477
10、@黃道長(zhǎng)-直接上代碼
https://yq.aliyun.com/roundtable/67516/?spm=a2c4e.11154000.rtdmain.115.438a18a844ewV0&order=score&type=&p=1#answer-146845?
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
轉(zhuǎn)載于:https://my.oschina.net/yunqi/blog/1809620
總結(jié)
以上是生活随笔為你收集整理的【晒出你的第83行代码】阿里研究员福贝,用一个小演示程序来解释一下 C++11/14 里的 closure 是可以多么的“爽”...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的 Vue.js 学习日记 (七) -
- 下一篇: MVC设计模式深入理解