摘要:考慮下面這段的代碼現(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
摘要:正則表達(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á)式對于我來說一直像黑暗魔法一樣的存...
摘要:無論是早期工具,還是現(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...
摘要:在這種背景下,誕生了很多工具很多前端工作流程。目前我們很多時候常說的前端工程師,其實(shí)主要指的就是其工程師。所以就是來解決這些問題的最后至此前端的一個工作結(jié)構(gòu)介紹至此結(jié)束。 這個時代不懂點(diǎn)前端知識,真的沒有辦法生存。就算不會寫,也得了解它的原理吧! 最近做了一些總結(jié),之前都是迷迷糊糊,搞不清楚前端之前的相關(guān)定位。好好梳理了一下。錯誤之處請各位指正。 本文主要說的是 JavaScript ...
閱讀 3521·2023-04-25 22:45
閱讀 1316·2021-11-11 16:54
閱讀 2821·2019-08-30 15:44
閱讀 3212·2019-08-30 15:44
閱讀 1674·2019-08-30 13:55
閱讀 974·2019-08-29 18:45
閱讀 1228·2019-08-29 17:25
閱讀 1039·2019-08-29 12:59