在Scala社區(qū)赵颅,Scala是基于性質(zhì)測試庫的實(shí)現(xiàn)之一。在本章我們將實(shí)現(xiàn)一個(gè)自己的測試庫暂刘,我們需要學(xué)習(xí)設(shè)計(jì)一個(gè)庫應(yīng)該做出哪些取舍性含,又應(yīng)該總結(jié)其中的一些設(shè)計(jì)思路。首先在設(shè)計(jì)AP...
在上章節(jié)中我們介紹了如何使用java.util.current中的API來實(shí)現(xiàn)Par:這種純函數(shù)式的并行計(jì)算結(jié)構(gòu)鸳惯,但是最后我們也提出了這個(gè)實(shí)現(xiàn)存在一個(gè)bug,那就是在固定線程...
現(xiàn)在計(jì)算機(jī)往往都有多個(gè)CPU叠萍,每個(gè)CPU都有多個(gè)核芝发,因此程序能否利用他們呢的并行處理能力就顯得十分重要了。但是并行程序之間的交互十分復(fù)雜苛谷,特別是以共享內(nèi)存這種傳統(tǒng)方式實(shí)現(xiàn)線程...
在上一個(gè)章節(jié)中我們完成如下組合子:unit辅鲸,map,map2腹殿,flatMap独悴,sequence和traverse。這些組合子并不是為處理隨機(jī)狀態(tài)而存在的锣尉。他們都是處理狀態(tài)的通...
純函數(shù)應(yīng)該如何來處理狀態(tài)刻炒?我們可以先從生成隨機(jī)數(shù)這個(gè)例子開始下手,先來看下如何以副作用的方式來生成隨機(jī)數(shù): 從上面的代碼可以推斷出rng對(duì)象中一定維護(hù)著一個(gè)狀態(tài)自沧,每次調(diào)用ne...
所謂無限流指的就是長度無限的流坟奥,但是無限流并不會(huì)將內(nèi)存吃光,他只是對(duì)于表達(dá)式的描述,他是惰性的爱谁,甚至一個(gè)Stream在真正應(yīng)用前他所占用的內(nèi)存是可以忽略的晒喷。所以我們完全可以使...
再之前介紹函數(shù)式數(shù)據(jù)結(jié)構(gòu)的章節(jié)中我們介紹了List這種數(shù)據(jù)結(jié)構(gòu),其中我們再List中實(shí)現(xiàn)了map访敌,flatMap凉敲,filter等方法,他們會(huì)接受一個(gè)函數(shù)并返回一個(gè)新的List...
在上一章節(jié)中我們介紹了Either的實(shí)現(xiàn)寺旺,在使用Either來校驗(yàn)輸入的例子中我們提到了Either的一個(gè)缺陷爷抓,那就是Either只能收集一次錯(cuò)誤信息,收集完就返回錯(cuò)誤信息了...
在上一章節(jié)中我們提到了用Option來處理錯(cuò)誤迅涮,Option來處理錯(cuò)誤非常簡單废赞,但是其中也存在一個(gè)問題就是Option過簡單。他不能攜帶錯(cuò)誤信息叮姑,以至于我們不能針對(duì)不同的錯(cuò)誤...
在函數(shù)式編程范式中為什么不用異常類處理錯(cuò)誤唉地?因?yàn)槭褂卯惓4嬖趦蓚€(gè)缺點(diǎn): 異常破壞了引用透明并引入了上下文依賴 異常不是類型安全的 那在函數(shù)式編程模式中應(yīng)該如何處理異常呢?在C...
代數(shù)類型(ADT)是又一個(gè)或者多個(gè)數(shù)據(jù)構(gòu)造器構(gòu)(data construct)所定義的數(shù)據(jù)類型传透,每個(gè)數(shù)據(jù)類型包含另個(gè)或者多個(gè)參數(shù)耘沼。數(shù)據(jù)類型是其數(shù)據(jù)構(gòu)造器的累加(sum)或者聯(lián)...
我們先回顧下上文中利用模式匹配和遞歸調(diào)用實(shí)現(xiàn)的sum方法和product方法: 假如拋棄product方法中的短路設(shè)計(jì),兩者實(shí)現(xiàn)的形式是完全一樣的朱盐。那么是否可以抽象一個(gè)更為泛...
什么是函數(shù)式數(shù)據(jù)結(jié)構(gòu)群嗤?函數(shù)式數(shù)據(jù)結(jié)構(gòu)式只能被純函數(shù)操作的數(shù)據(jù)結(jié)構(gòu),純函數(shù)是不能修改數(shù)據(jù)結(jié)構(gòu)的也不能產(chǎn)生副作用兵琳。函數(shù)式數(shù)據(jù)結(jié)構(gòu)有什么特點(diǎn)狂秘?函數(shù)式數(shù)據(jù)結(jié)構(gòu)最大的特點(diǎn)就是其被定義為...
多態(tài)函數(shù):基于類型的抽象 在上文中我們寫函數(shù)都是單態(tài)的,也即是函數(shù)只能操作一種數(shù)據(jù)類型躯肌,例如abs者春,factorial2,fib1只能操作Int類型清女,formatResult...
從本節(jié)開始我們會(huì)介紹如何使用Scala進(jìn)行函數(shù)編程钱烟,在這之前希望你能對(duì)Scala的基礎(chǔ)語法有所了解。其中我們會(huì)接觸一些語法概念嫡丙,例如: 尾遞歸函數(shù)(tail recusive...
函數(shù)式編程概念 什么是函數(shù)式編程拴袭?只用純函數(shù)來構(gòu)造程序就稱為函數(shù)式編程 什么是純函數(shù)?沒有副作用的函數(shù)稱為純函數(shù) 什么是副作用曙博?除去函數(shù)本身的作用外沒有其他的作用拥刻。帶副作用的...