摘要:可移植性可移植性可以意味著把函數序列化并通過發送。同樣,程序投入運行后,最終用戶在遇到問題時可以重新啟用斷言。最后一個并行代碼,就是說可以并行運行任意純函數。因他們不需要訪問共享的內存,也不會因副作用而進入競爭狀態。
前言
因為想彌補一下自己對一些函數式編程的了解和體會,所以特意找了一些資料來閱讀~以下的感想是來自于這本書噠:
《JS 函數式編程指南》什么是純函數
作者: Franklin Risby for his great work!
地址:https://legacy.gitbook.com/bo...
純函數就是保證輸入和對應的輸出是相同的函數,也就類似于我們課本中學的函數的概念!一個x永遠只對應一個y值。
比如,js中存在的會改變原數組的一些數組操作函數,這些就是不純的。
主要是有共享的變量和成員,比如全局變量之類的。
可緩存性(Cacheable)
可移植性/自文檔化(Portable / Self-Documenting)
可測試性(Testable)
合理性(Reasonable)
并行代碼
對于可緩存性,有下面這段“通用”的代碼,提取一次(即計算)就緩存一次,后面取的時候就不用重新計算了:
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]; }; };
而如果函數是不純的話,我們并不能靠輸入的值來提取出唯一對應的結果,因為它可能有多種情況。
可移植性
可移植性可以意味著把函數序列化(serializing)并通過 socket 發送。也可以意味著代碼能夠在 web workers
中運行。總之,可移植性是一個非常強大的特性。
自文檔化是說把需要的數據都寫在參數里,不寫成比如對象的形式,因為對象的屬性可以在外面被修改所以可能會造成不一樣的結果。
而把參數都列出來,這樣使用者也知道它需要什么數據,也就是像有文檔一樣告訴你。
可測試性
我們很多情況下都是要測試某一個函數或者某一個部分,如果這個函數依賴一些全局的東西,我們在設置斷點的時候涵蓋的范圍就會很大,所以這樣會影響我們的測試。而純函數可以讓我們只專注于這一個函數。
斷言:表示為一些布爾表達式,程序員相信在程序中的某個特定點該表達式值為真,可以在任何時候啟用和禁用斷言驗證,因此可以在測試時啟用斷言而在部署時禁用斷言。同樣,程序投入運行后,最終用戶在遇到問題時可以重新啟用斷言。
合理性
如果一段代碼可以替換成它執行所得的結果,而且是在不改變整個程序行為的前提下替換的,那么我們就說這段代碼是引用透明的。
我們可以使用一種叫做“等式推導”(equational
reasoning)的技術來分析代碼。所謂“等式推導”就是“一對一”替換,有點像在不考慮程序性執行的怪異行為(quirks of
programmatic evaluation)的情況下,手動執行相關代碼。
最后一個并行代碼,就是說可以并行運行任意純函數。因他們不需要訪問共享的內存,也不會因副作用而進入競爭狀態。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97817.html
摘要:是一個用語言打造的輕量級開源訪問控制框架,目前在開源。采用了元模型的設計思想,支持多種經典的訪問控制方案,如基于角色的訪問控制基于屬性的訪問控制等。一個專為定制的的擴展包。 PHP-Casbin 是一個用 PHP 語言打造的輕量級開源訪問控制框架( https://github.com/php-casbin... ),目前在 GitHub 開源。PHP-Casbin 采用了元模型的設計...
摘要:最近剛剛學習了一個的開發框架,最重要的是可以用開發傳送門以下是學習過程中的筆記上面時全局安裝完成后用檢查是否成功創建了一個名為的項目,然后進入目錄,安裝依賴,啟動項目,瀏覽器打開就可以看到頁面了。 最近剛剛學習了thinkjs--一個node的MVC開發框架,最重要的是可以用es6/es7開發【傳送門】 以下是學習過程中的筆記: npm install thinkjs@2 -g --v...
摘要:首先查詢當前的工作路徑獲取當前工作路徑方法是類的方法,是的方法默認是的一個實例,參數解釋如下路徑相對位置,保存在獲得的路徑下絕對位置分隔符使用分隔需要保存的數據,如果不寫,默認是替換空值確實值保存為,如果不寫,默認是空格式保留兩位小數是否保 1 .首先查詢當前的工作路徑: import os os.getcwd() #獲取當前工作路徑 2 .方法: to_csv()是DataF...
摘要:插件機制可以說是自定義的鉤子函數。首先在新建文件夾,新建文件以為例更新內容緩存里對應的數組表示鉤子函數的調用名,具體調用的是下面的方法。 一.簡介 這個個人博客網站最初制作的目的就是練習使用thinkJs,這一篇就主要講一下thinkJs的一些特性和注意事項。涉及到了文件上傳,thinkJs的插件機制,model層建立以及CURD的編寫方式等。本項目github地址在這里。 項目thi...
閱讀 1315·2023-04-26 01:28
閱讀 2065·2021-11-08 13:28
閱讀 2315·2021-10-12 10:17
閱讀 2280·2021-09-28 09:46
閱讀 4141·2021-09-09 09:33
閱讀 3719·2021-09-04 16:40
閱讀 1077·2019-08-29 15:21
閱讀 2689·2019-08-26 17:17