成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

如何寫懶惰的代碼

betacat / 578人閱讀

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

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

考慮下面這段 JavaScript 的代碼:

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

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

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

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

制造懶惰
if 條件,和許多 control flow 的語句都是很懶的,他們是不會(huì)被計(jì)算直到程序真的跑到了它們的條件里??纯催@段代碼:

想象一個(gè) List 從1到一億,然后我們啟動(dòng)這段代碼:

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

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

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

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

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

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

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

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

相關(guān)文章

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

    摘要:正則表達(dá)式使用單個(gè)字符串來描述匹配一系列匹配某個(gè)句法規(guī)則的字符串。接下來,是在手機(jī)正則里面已經(jīng)出現(xiàn)了。序列匹配而則匹配。分組與反向引用分組,又稱為子表達(dá)式。把正則表達(dá)式拆分成小表達(dá)式。 本文轉(zhuǎn)載自網(wǎng)絡(luò)。轉(zhuǎn)載編輯過程中,可能有遺漏或錯(cuò)誤,請以原文為準(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 是一個(gè)基于PostCSS 開發(fā)的用于生成雪碧圖圖片及其C...

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

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

    binaryTree 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<