成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

如何寫懶惰的代碼

betacat / 552人閱讀

摘要:考慮下面這段的代碼現(xiàn)在的問題是是否計算答案大概是是的。如果你需要代碼變得懶一些,你需要繞過它的勤奮。這樣的代碼太差了??上У氖牵m然是懶惰的,它卻很勤奮的計算它的參數(shù)。里有一億個數(shù),所以這樣的代碼太貴了。

懶和勤奮:
“懶”是一個很廣泛的詞,在程序員的世界里,它指只做需要做的工作。而“勤奮”在這里指做很多的工作為了未來。

考慮下面這段 JavaScript 的代碼:

現(xiàn)在的問題是: JavaScript 是否計算 2+3 ? 答案大概是:是的。當(dāng) JaveScript 在給一個函數(shù)傳送參數(shù)的時候,它是非常勤奮的。它計算所有表達(dá)式,并且不管是否真的需要計算這些表達(dá)式。

如果你需要代碼變得懶一些,你需要繞過它的勤奮。比如:

JavaScript 會計算函數(shù)?() => 2?+ 3
但它不會計算函數(shù)里面的表達(dá)式。當(dāng)這個函數(shù)并沒有開始執(zhí)行,里面的2+3并不會 被計算。

把表達(dá)式放在函數(shù)里來延遲它被計算是一個編程里經(jīng)常用到的方法。有很多這方面有趣的應(yīng)用。

制造懶惰
if 條件,和許多 control flow 的語句都是很懶的,他們是不會被計算直到程序真的跑到了它們的條件里。看看這段代碼:

想象一個 List 從1到一億,然后我們啟動這段代碼:

我們會得到正確的答案,但是代碼先做了一個從一到一億的 list。這樣的代碼太差了。因?yàn)檫B小孩都知道你可以隨時從函數(shù)里 return 出來,然后剩下的值就被忽略不計了。所以我們可以這樣寫:

這個版本的函數(shù)要比之前那個懶多了。根據(jù) containing,我們可以寫一個類似的函數(shù),findwith:

findwith 函數(shù)預(yù)測第一個值是不是想要的??上У氖牵m然 findwith 是懶惰的,它卻很勤奮的計算它的參數(shù)。比如說我們需要找到 list 里的第一個大于99并且順逆序一樣的數(shù)字:

我們得到的結(jié)果是101。
但是 JavaScript 會很勤奮地計算所有的參數(shù),所以它計算 isPalindromic, gt(99)),還有 billion。billion 里有一億個數(shù),所以這樣的代碼太貴了。我們需要更懶的函數(shù):

現(xiàn)在JavaScript還是會計算 Numbers(),但是這里是一個 iterator,而不是一個 array,條件句:for (const element of list) { ... },從 iterator里取值,而不是從一個有一億個值得 array里。

原文鏈接:http://raganwald.com/2016/04/15/laziness-is-a-virtue.html

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79222.html

相關(guān)文章

  • 60分鐘正則從入門到深入

    摘要:正則表達(dá)式使用單個字符串來描述匹配一系列匹配某個句法規(guī)則的字符串。接下來,是在手機(jī)正則里面已經(jīng)出現(xiàn)了。序列匹配而則匹配。分組與反向引用分組,又稱為子表達(dá)式。把正則表達(dá)式拆分成小表達(dá)式。 本文轉(zhuǎn)載自網(wǎng)絡(luò)。轉(zhuǎn)載編輯過程中,可能有遺漏或錯誤,請以原文為準(zhǔn)。原文作者:水墨寒湘原文鏈接:https://juejin.im/post/582dfc... 正則表達(dá)式對于我來說一直像黑暗魔法一樣的存...

    _ang 評論0 收藏0
  • postcss-lazysprite: 一種生成CSS 雪碧圖懶惰姿勢

    摘要:無論是早期工具,還是現(xiàn)在流行的配合這類構(gòu)建工具而產(chǎn)生的雪碧圖插件。 本文原文鏈接:https://devework.com/postcss-...,轉(zhuǎn)載請注明原始來源,謝謝! showImg(https://segmentfault.com/img/bVPmaC?w=1692&h=754); postcss-lazysprite 是一個基于PostCSS 開發(fā)的用于生成雪碧圖圖片及其C...

    BearyChat 評論0 收藏0
  • php工程獅感知前端工作流程

    摘要:在這種背景下,誕生了很多工具很多前端工作流程。目前我們很多時候常說的前端工程師,其實(shí)主要指的就是其工程師。所以就是來解決這些問題的最后至此前端的一個工作結(jié)構(gòu)介紹至此結(jié)束。 這個時代不懂點(diǎn)前端知識,真的沒有辦法生存。就算不會寫,也得了解它的原理吧! 最近做了一些總結(jié),之前都是迷迷糊糊,搞不清楚前端之前的相關(guān)定位。好好梳理了一下。錯誤之處請各位指正。 本文主要說的是 JavaScript ...

    binaryTree 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<