亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

【個(gè)人向】20180916 - Read AND Think

邱勇 / 2666人閱讀

摘要:可移植性可移植性可以意味著把函數(shù)序列化并通過發(fā)送。同樣,程序投入運(yùn)行后,最終用戶在遇到問題時(shí)可以重新啟用斷言。最后一個(gè)并行代碼,就是說可以并行運(yùn)行任意純函數(shù)。因他們不需要訪問共享的內(nèi)存,也不會(huì)因副作用而進(jìn)入競(jìng)爭(zhēng)狀態(tài)。

前言

因?yàn)橄霃浹a(bǔ)一下自己對(duì)一些函數(shù)式編程的了解和體會(huì),所以特意找了一些資料來閱讀~以下的感想是來自于這本書噠:

《JS 函數(shù)式編程指南》 
作者: Franklin Risby for his great work!
地址:https://legacy.gitbook.com/bo...
什么是純函數(shù)

純函數(shù)就是保證輸入和對(duì)應(yīng)的輸出是相同的函數(shù),也就類似于我們課本中學(xué)的函數(shù)的概念!一個(gè)x永遠(yuǎn)只對(duì)應(yīng)一個(gè)y值。

比如,js中存在的會(huì)改變?cè)瓟?shù)組的一些數(shù)組操作函數(shù),這些就是不純的。
主要是有共享的變量和成員,比如全局變量之類的。

純的好處

可緩存性(Cacheable)

可移植性/自文檔化(Portable / Self-Documenting)

可測(cè)試性(Testable)

合理性(Reasonable)

并行代碼

對(duì)于可緩存性,有下面這段“通用”的代碼,提取一次(即計(jì)算)就緩存一次,后面取的時(shí)候就不用重新計(jì)算了:

var memoize = function(f) {
  var cache = {};

  return function() {
    var arg_str = JSON.stringify(arguments);
    cache[arg_str] = cache[arg_str] || f.apply(f, arguments);
    return cache[arg_str];
  };
};

而如果函數(shù)是不純的話,我們并不能靠輸入的值來提取出唯一對(duì)應(yīng)的結(jié)果,因?yàn)樗赡苡卸喾N情況。

可移植性

可移植性可以意味著把函數(shù)序列化(serializing)并通過 socket 發(fā)送。也可以意味著代碼能夠在 web workers
中運(yùn)行。總之,可移植性是一個(gè)非常強(qiáng)大的特性。

自文檔化是說把需要的數(shù)據(jù)都寫在參數(shù)里,不寫成比如對(duì)象的形式,因?yàn)閷?duì)象的屬性可以在外面被修改所以可能會(huì)造成不一樣的結(jié)果。
而把參數(shù)都列出來,這樣使用者也知道它需要什么數(shù)據(jù),也就是像有文檔一樣告訴你。

可測(cè)試性
我們很多情況下都是要測(cè)試某一個(gè)函數(shù)或者某一個(gè)部分,如果這個(gè)函數(shù)依賴一些全局的東西,我們?cè)谠O(shè)置斷點(diǎn)的時(shí)候涵蓋的范圍就會(huì)很大,所以這樣會(huì)影響我們的測(cè)試。而純函數(shù)可以讓我們只專注于這一個(gè)函數(shù)。

斷言:表示為一些布爾表達(dá)式,程序員相信在程序中的某個(gè)特定點(diǎn)該表達(dá)式值為真,可以在任何時(shí)候啟用和禁用斷言驗(yàn)證,因此可以在測(cè)試時(shí)啟用斷言而在部署時(shí)禁用斷言。同樣,程序投入運(yùn)行后,最終用戶在遇到問題時(shí)可以重新啟用斷言。

合理性

如果一段代碼可以替換成它執(zhí)行所得的結(jié)果,而且是在不改變整個(gè)程序行為的前提下替換的,那么我們就說這段代碼是引用透明的。
我們可以使用一種叫做“等式推導(dǎo)”(equational
reasoning)的技術(shù)來分析代碼。所謂“等式推導(dǎo)”就是“一對(duì)一”替換,有點(diǎn)像在不考慮程序性執(zhí)行的怪異行為(quirks of
programmatic evaluation)的情況下,手動(dòng)執(zhí)行相關(guān)代碼。

最后一個(gè)并行代碼,就是說可以并行運(yùn)行任意純函數(shù)。因他們不需要訪問共享的內(nèi)存,也不會(huì)因副作用而進(jìn)入競(jìng)爭(zhēng)狀態(tài)。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/97817.html

相關(guān)文章

  • Think-Casbin:一個(gè)專為ThinkPHP打造的輕量級(jí)訪問控制庫,支持RBAC/ACL等權(quán)限

    摘要:是一個(gè)用語言打造的輕量級(jí)開源訪問控制框架,目前在開源。采用了元模型的設(shè)計(jì)思想,支持多種經(jīng)典的訪問控制方案,如基于角色的訪問控制基于屬性的訪問控制等。一個(gè)專為定制的的擴(kuò)展包。 PHP-Casbin 是一個(gè)用 PHP 語言打造的輕量級(jí)開源訪問控制框架( https://github.com/php-casbin... ),目前在 GitHub 開源。PHP-Casbin 采用了元模型的設(shè)計(jì)...

    lieeps 評(píng)論0 收藏0
  • 入手thinkjs,學(xué)習(xí)筆記

    摘要:最近剛剛學(xué)習(xí)了一個(gè)的開發(fā)框架,最重要的是可以用開發(fā)傳送門以下是學(xué)習(xí)過程中的筆記上面時(shí)全局安裝完成后用檢查是否成功創(chuàng)建了一個(gè)名為的項(xiàng)目,然后進(jìn)入目錄,安裝依賴,啟動(dòng)項(xiàng)目,瀏覽器打開就可以看到頁面了。 最近剛剛學(xué)習(xí)了thinkjs--一個(gè)node的MVC開發(fā)框架,最重要的是可以用es6/es7開發(fā)【傳送門】 以下是學(xué)習(xí)過程中的筆記: npm install thinkjs@2 -g --v...

    shuibo 評(píng)論0 收藏0
  • pandas的to_csv()使用方法

    摘要:首先查詢當(dāng)前的工作路徑獲取當(dāng)前工作路徑方法是類的方法,是的方法默認(rèn)是的一個(gè)實(shí)例,參數(shù)解釋如下路徑相對(duì)位置,保存在獲得的路徑下絕對(duì)位置分隔符使用分隔需要保存的數(shù)據(jù),如果不寫,默認(rèn)是替換空值確實(shí)值保存為,如果不寫,默認(rèn)是空格式保留兩位小數(shù)是否保 1 .首先查詢當(dāng)前的工作路徑: import os os.getcwd() #獲取當(dāng)前工作路徑 2 .方法: to_csv()是DataF...

    vvpvvp 評(píng)論0 收藏0
  • Vue+thinkJs博客網(wǎng)站(二)之thinkJs的使用

    摘要:插件機(jī)制可以說是自定義的鉤子函數(shù)。首先在新建文件夾,新建文件以為例更新內(nèi)容緩存里對(duì)應(yīng)的數(shù)組表示鉤子函數(shù)的調(diào)用名,具體調(diào)用的是下面的方法。 一.簡(jiǎn)介 這個(gè)個(gè)人博客網(wǎng)站最初制作的目的就是練習(xí)使用thinkJs,這一篇就主要講一下thinkJs的一些特性和注意事項(xiàng)。涉及到了文件上傳,thinkJs的插件機(jī)制,model層建立以及CURD的編寫方式等。本項(xiàng)目github地址在這里。 項(xiàng)目thi...

    desdik 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<