摘要:考慮下面這段的代碼現在的問題是是否計算答案大概是是的。如果你需要代碼變得懶一些,你需要繞過它的勤奮。這樣的代碼太差了。可惜的是,雖然是懶惰的,它卻很勤奮的計算它的參數。里有一億個數,所以這樣的代碼太貴了。
懶和勤奮:
“懶”是一個很廣泛的詞,在程序員的世界里,它指只做需要做的工作。而“勤奮”在這里指做很多的工作為了未來。
考慮下面這段 JavaScript 的代碼:
現在的問題是: JavaScript 是否計算 2+3 ? 答案大概是:是的。當 JaveScript 在給一個函數傳送參數的時候,它是非常勤奮的。它計算所有表達式,并且不管是否真的需要計算這些表達式。
如果你需要代碼變得懶一些,你需要繞過它的勤奮。比如:
JavaScript 會計算函數?() => 2?+ 3
但它不會計算函數里面的表達式。當這個函數并沒有開始執行,里面的2+3并不會 被計算。
把表達式放在函數里來延遲它被計算是一個編程里經常用到的方法。有很多這方面有趣的應用。
制造懶惰
if 條件,和許多 control flow 的語句都是很懶的,他們是不會被計算直到程序真的跑到了它們的條件里。看看這段代碼:
想象一個 List 從1到一億,然后我們啟動這段代碼:
我們會得到正確的答案,但是代碼先做了一個從一到一億的 list。這樣的代碼太差了。因為連小孩都知道你可以隨時從函數里 return 出來,然后剩下的值就被忽略不計了。所以我們可以這樣寫:
這個版本的函數要比之前那個懶多了。根據 containing,我們可以寫一個類似的函數,findwith:
findwith 函數預測第一個值是不是想要的。可惜的是,雖然 findwith 是懶惰的,它卻很勤奮的計算它的參數。比如說我們需要找到 list 里的第一個大于99并且順逆序一樣的數字:
我們得到的結果是101。
但是 JavaScript 會很勤奮地計算所有的參數,所以它計算 isPalindromic, gt(99)),還有 billion。billion 里有一億個數,所以這樣的代碼太貴了。我們需要更懶的函數:
現在JavaScript還是會計算 Numbers(),但是這里是一個 iterator,而不是一個 array,條件句:for (const element of list) { ... },從 iterator里取值,而不是從一個有一億個值得 array里。
原文鏈接:http://raganwald.com/2016/04/15/laziness-is-a-virtue.html
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79222.html
摘要:正則表達式使用單個字符串來描述匹配一系列匹配某個句法規則的字符串。接下來,是在手機正則里面已經出現了。序列匹配而則匹配。分組與反向引用分組,又稱為子表達式。把正則表達式拆分成小表達式。 本文轉載自網絡。轉載編輯過程中,可能有遺漏或錯誤,請以原文為準。原文作者:水墨寒湘原文鏈接:https://juejin.im/post/582dfc... 正則表達式對于我來說一直像黑暗魔法一樣的存...
摘要:無論是早期工具,還是現在流行的配合這類構建工具而產生的雪碧圖插件。 本文原文鏈接:https://devework.com/postcss-...,轉載請注明原始來源,謝謝! showImg(https://segmentfault.com/img/bVPmaC?w=1692&h=754); postcss-lazysprite 是一個基于PostCSS 開發的用于生成雪碧圖圖片及其C...
摘要:在這種背景下,誕生了很多工具很多前端工作流程。目前我們很多時候常說的前端工程師,其實主要指的就是其工程師。所以就是來解決這些問題的最后至此前端的一個工作結構介紹至此結束。 這個時代不懂點前端知識,真的沒有辦法生存。就算不會寫,也得了解它的原理吧! 最近做了一些總結,之前都是迷迷糊糊,搞不清楚前端之前的相關定位。好好梳理了一下。錯誤之處請各位指正。 本文主要說的是 JavaScript ...
閱讀 3479·2023-04-25 22:45
閱讀 1282·2021-11-11 16:54
閱讀 2790·2019-08-30 15:44
閱讀 3190·2019-08-30 15:44
閱讀 1646·2019-08-30 13:55
閱讀 941·2019-08-29 18:45
閱讀 1196·2019-08-29 17:25
閱讀 1007·2019-08-29 12:59