摘要:而函數(shù)式編程中,則認(rèn)為數(shù)據(jù)只是行為加工的產(chǎn)品。我們會(huì)發(fā)現(xiàn),在函數(shù)式編程中,我們?nèi)コ袅酥髡Z(yǔ)。下面就來(lái)說(shuō)說(shuō)函數(shù)式編程的一些具體的東西。純函數(shù)在函數(shù)式編程中,有一個(gè)很重要的概念是純函數(shù)。
JavaScript是一門很神奇的語(yǔ)言,作為一門現(xiàn)代化的語(yǔ)言,他有很多很有特色的東西,這些東西,讓我們看到了一個(gè)十分自由化的未來(lái),你永遠(yuǎn)都不知道,自己是不是掌握了這門奇葩的要命的語(yǔ)言。本文,可能沒(méi)有那么多高深的編程技巧,有的更多的是,對(duì)編程本身的理解。因?yàn)椋恢雷约河卸喟装V,所以,要記錄下來(lái),等到自己不白癡的時(shí)候,就能緬懷當(dāng)年那個(gè)白癡的自己了。
什么是函數(shù)式編程所謂函數(shù)式編程,是把函數(shù)本身上升到一等公民的地位,進(jìn)行編程構(gòu)建。在書中,作者用了這么一句話來(lái)形容函數(shù)式編程:
函數(shù)式編程通過(guò)使用函數(shù)來(lái)將值轉(zhuǎn)換成抽象單元,接著用于構(gòu)建軟件系統(tǒng)。
額,那么好,我們先回憶一下什么叫函數(shù)。
函數(shù)一般的,在一個(gè)變化過(guò)程中,有兩個(gè)變量x、y,如果給定一個(gè)x值,相應(yīng)的就確定唯一的一個(gè)y,那么就稱y是x的函數(shù),其中x是自變量,y是因變量,x的取值范圍叫做這個(gè)函數(shù)的定義域,相應(yīng)y的取值范圍叫做函數(shù)的值域。
這是數(shù)學(xué)中的定義,簡(jiǎn)單的說(shuō),函數(shù)就是從A到B的關(guān)系映射。在計(jì)算機(jī)中,我們將多條語(yǔ)句組成的程序段(程序塊)叫做函數(shù),一個(gè)函數(shù)本身應(yīng)該有一定的意義。和數(shù)學(xué)定義相當(dāng)?shù)氖牵兞康纳芷谒诘暮瘮?shù)空間,為變量的定義域。
面向函數(shù)的編程所謂函數(shù)式編程,我們又可以叫做是面向函數(shù)的編程。所謂面向函數(shù)就是使用函數(shù)來(lái)作為我們分析和抽象程序的主要工具。
嗯,首先,我們繼續(xù)來(lái)復(fù)習(xí)一下
什么叫做面向過(guò)程。
“面向過(guò)程”(Procedure Oriented)是一種以過(guò)程為中心的編程思想。“面向過(guò)程”也可稱之為“面向記錄”編程思想,他們不支持豐富的“面向?qū)ο蟆碧匦裕ū热缋^承、多態(tài)),并且它們不允許混合持久化狀態(tài)和域邏輯。
其實(shí),說(shuō)白了,就是想到什么寫什么。
什么叫做面向?qū)ο?/p>
按人們認(rèn)識(shí)客觀世界的系統(tǒng)思維方式,采用基于對(duì)象(實(shí)體)的概念建立模型,模擬客觀世界分析、設(shè)計(jì)、實(shí)現(xiàn)軟件的辦法。通過(guò)面向?qū)ο蟮睦砟钍褂?jì)算機(jī)軟件系統(tǒng)能與現(xiàn)實(shí)世界中的系統(tǒng)一一對(duì)應(yīng)。
在面向?qū)ο笾校覀兌贾?b>類和對(duì)象是兩個(gè)很重要的概念。
我們知道,所謂的類,其實(shí)就是:
具有相同特性(數(shù)據(jù)元素)和行為(功能)的對(duì)象的抽象就是類。因此,對(duì)象的抽象是類,類的具體化就是對(duì)象,也可以說(shuō)類的實(shí)例是對(duì)象,類實(shí)際上就是一種數(shù)據(jù)類型。
而我們所說(shuō)的對(duì)象,其實(shí)就是:
對(duì)象是人們要進(jìn)行研究的任何事物,從最簡(jiǎn)單的整數(shù)到復(fù)雜的飛機(jī)等均可看作對(duì)象,它不僅能表示具體的事物,還能表示抽象的規(guī)則、計(jì)劃或事件。
我們不難發(fā)現(xiàn),類和對(duì)象,其實(shí)都是從數(shù)據(jù)角度出發(fā)來(lái)思考和解決問(wèn)題,以數(shù)據(jù)本身為運(yùn)算核心來(lái)抽象我們的計(jì)算行為。但是,很多時(shí)候,我們會(huì)發(fā)現(xiàn),其實(shí)我們的運(yùn)算行為遠(yuǎn)遠(yuǎn)比數(shù)據(jù)本身要復(fù)雜,而且,我們很多時(shí)候,其實(shí)并不能很好的去抽象一個(gè)對(duì)象。
我的數(shù)據(jù)老師曾經(jīng)這樣教導(dǎo)我們:
所謂程序,就是數(shù)據(jù)結(jié)構(gòu)加算法。
如果說(shuō),面向?qū)ο笫菑臄?shù)據(jù)結(jié)構(gòu)的角度出發(fā)的話,面向函數(shù)的編程,就是從算法角度出發(fā),也就是從行為的角度出發(fā)。
為什么要用函數(shù)式編程 數(shù)據(jù)和行為的關(guān)系在計(jì)算機(jī)中,數(shù)據(jù)多數(shù)指的是存儲(chǔ)結(jié)構(gòu)。行為指的多數(shù)是計(jì)算操作。比如說(shuō)這段代碼:
function say(){ let a = 1 + 1; console.log(a) }
這段代碼里,作為變量存在的a,say,是我們所熟知的數(shù)據(jù),而function say()則是包含了整個(gè)說(shuō)的行為。
在面向?qū)ο蟮木幊讨校覀兞?xí)慣把對(duì)象作為行為的核心,也就是說(shuō),先有人,然后,人來(lái)執(zhí)行一個(gè)動(dòng)作。而,對(duì)象,其實(shí)就是某一種變量,亦或是某一種數(shù)據(jù)類型。而函數(shù)式編程中,則認(rèn)為數(shù)據(jù)只是行為加工的產(chǎn)品。將行為和數(shù)據(jù)分離。我們來(lái)看一段代碼。
// man.php class Man { function __constructor($sexy){ $this->sexy = $sexy; } public function sayHello($string){ echo "I"m a ".$this->sexy.",I want to say:".$string; } } // male.php require_once "man.php" $male = new Man("man"); $male->sayHello("my name is homker"); // I"m a man, I want to say: my name is homker
tips:
因?yàn)閖avascript本身是沒(méi)有類的概念的,為了更好的說(shuō)明問(wèn)題,這里使用了php來(lái)作為范例語(yǔ)言,當(dāng)然,你也可以使用javascript面向?qū)ο蟮姆绞絹?lái)重新實(shí)現(xiàn)這段代碼。就像這樣。function Man(sexy){ var self = this; self._sexy = sexy; self.sayHello = function(string){ console.log("I"m a "+self._sexy+",I want to say:"+string); } } var male = new Man("man"); male.sayHello("my name is homker");
這是一段很簡(jiǎn)單的面向?qū)ο蟮拇a,我們看看同樣的功能在函數(shù)式中要怎么做。
function Man(sexy){ return function(string){ console.log("I"m a "+sexy+",I want to say:"+string); } } var sayHello = Man("man"); sayHello("my name is homker");
我們會(huì)發(fā)現(xiàn),在函數(shù)式編程中,我們?nèi)コ袅酥髡Z(yǔ)。你不知道這個(gè)動(dòng)作是由誰(shuí)發(fā)出的。相比于在面向?qū)ο缶幊讨校瑪?shù)據(jù)是對(duì)象的屬性,在函數(shù)式編程中,我們并不在乎這個(gè)數(shù)據(jù)的內(nèi)容是什么,而更在乎其變化。
專注于過(guò)程本身額,當(dāng)然,嚴(yán)格意義上來(lái)說(shuō),其實(shí),這個(gè)sayHello的原型是Object,在瀏覽器端,追溯他的原型鏈,它是掛在window對(duì)象下面的。
在實(shí)際的開(kāi)發(fā)過(guò)程中,我們有的時(shí)候很難抽象出一個(gè)對(duì)象來(lái)描述我們到底要做什么,或者說(shuō),我們其實(shí)并不在乎這堆數(shù)據(jù)里面的內(nèi)容是什么,我們要關(guān)心的,只是把數(shù)據(jù)經(jīng)過(guò)加工,得出結(jié)果,僅此而已。至于這個(gè)數(shù)據(jù),到底是用來(lái)干什么的,我們其實(shí)可以并不用關(guān)心。
如何使用函數(shù)式編程上面說(shuō)的都是一些思維上的東西,可能很稚嫩,希望各位大大們能指出其中的錯(cuò)誤,切不可吝嗇言語(yǔ)。下面就來(lái)說(shuō)說(shuō)函數(shù)式編程的一些具體的東西。
一等公民所謂一等公民,說(shuō)的是函數(shù)本身可以成為代碼構(gòu)成中的任意部分。具體的來(lái)說(shuō),函數(shù)可以具有以下的特點(diǎn):
函數(shù)可以存儲(chǔ)為變量
函數(shù)可以成為數(shù)組的一個(gè)元素
函數(shù)可以成為對(duì)象的成員變量
函數(shù)可以在使用的時(shí)被直接創(chuàng)建
1 + (function(){ return 1 })(); //2
函數(shù)可以被作為實(shí)參傳遞
函數(shù)可以被另一個(gè)函數(shù)返回
函數(shù)可以返回另一個(gè)函數(shù)
函數(shù)可以作為形參
相信大家一看就懂了。
純函數(shù) (Pure Function)在函數(shù)式編程中,有一個(gè)很重要的概念是純函數(shù)。所謂純函數(shù)就是
可預(yù)見(jiàn)性純函數(shù)(Pure Function)與外界交換數(shù)據(jù)只有唯一渠道——參數(shù)和返回值。其在邏輯上沒(méi)有副作用
簡(jiǎn)單的說(shuō),就是你輸入什么,就輸出什么。輸入和輸出是可預(yù)見(jiàn)的。比如說(shuō)像醬:
function add(x,y){ x = _.isNumber(x)? x : 0; y = _.isNumber(y)? y : 0; return x+y; } add(1,2); // 3
這樣的一個(gè)函數(shù),你輸入兩個(gè)變量,你可以很確定的,你得到的一定是兩者之和。與之相異的,在javascript編程中很容易出現(xiàn)的,比如說(shuō)醬:
var x = 10; function add10(y){ return y+x; } add10(1); // 11 x = 11; add10(1); //12
對(duì)于這個(gè)函數(shù)而言,函數(shù)本身是不可控的,如果外部的x發(fā)生改變,函數(shù)的返回值也隨之會(huì)發(fā)生改變。那么如果想避免,應(yīng)該怎么寫呢:
function add(x){ return function(y){ return x+y; } } var add10 = add(10); add10(1); //11
這個(gè)時(shí)候,將函數(shù)所需的變量閉包在函數(shù)體的內(nèi)部,函數(shù)的運(yùn)算是不依賴于外界的變量的,你輸入什么,就一定會(huì)輸出什么。
完整性為了實(shí)現(xiàn)函數(shù)的可控性,要保證,函數(shù)本省是完整的。函數(shù)的完整表現(xiàn)在,函數(shù)的運(yùn)行不依賴于外界的環(huán)境變量。同時(shí),函數(shù)的邏輯是完整的。比如說(shuō),醬:
a demo
上面是我們經(jīng)常寫的方式,當(dāng)然啦,如果框架復(fù)雜一點(diǎn),可能會(huì)多一點(diǎn)回調(diào)嵌套。但是,邏輯不出于此。但是呢,如果要函數(shù)完整,應(yīng)該醬,額,我就寫重要的部分啦:
var getJson = function(url,params){ return $.getJson(url,params); } var display = function(text){ $("#display").text(text) } var getJsonClickHandle = function(){ getJson("url",{}).done(display) } var init = function(){ $("#getJson").click(getJsonClickHandle); } init();
這時(shí)候,我們抽象了整個(gè)行為。
點(diǎn)擊 -> 獲取數(shù)據(jù) -> 顯示數(shù)據(jù)。
醬,我們把每個(gè)行為轉(zhuǎn)換成了一個(gè)多帶帶的函數(shù)行為。這樣的,每一個(gè)函數(shù)都是多帶帶的行為,可以很好的擴(kuò)展和復(fù)制到其他地方。
同時(shí),我們也引出了一個(gè)純函數(shù)很重要的部分。
可測(cè)試我們發(fā)現(xiàn),當(dāng)函數(shù)功能變的單一的時(shí)候,我們可以很清晰的知道函數(shù)輸入什么,輸出什么的時(shí)候,我們發(fā)現(xiàn),這個(gè)代碼的可測(cè)試性,得到了很大的提高。還是用上面的兩段代碼,前者,根本不知道怎么去寫測(cè)試,或者說(shuō),就是錯(cuò)了,你也不知道哪里錯(cuò)的,因?yàn)椋械倪壿嫳桓鞣N匿名函數(shù)包裹了,很難很快的定位到問(wèn)題的所在,后者,則容易了很多。
可組合(compose)當(dāng)函數(shù)純化之后,有一個(gè)很鮮明的特點(diǎn)是,這個(gè)函數(shù)變的可以組合了。我們可以像堆樂(lè)高積木一樣,把各個(gè)我們要用的函數(shù)堆起來(lái)變成一個(gè)更大得函數(shù)體。比如說(shuō)醬:
使用了underscore.js;
function checker(){ var validators = _.toArray(arguments); return function(obj){ return _.reducer(validators,function(err,check){ if(check(obj)){ return errs; }else{ return _.chain(errs).push(check.message).value(); } },[]) } } function validator(message,fun){ var f = function(){ return fun.apply(fun,arguments); }; f["message"] = message; return f; } function hasKeys(){ var KEYS = _.toArray(arguments); var fun = function(obj){ return _.every(KEYS,function(key){ return _.has(obj,key); }); }; fun.message = KEYS.concat([",this key is valid"]).join(" "); return fun; } var checkCommand = checker(hasKeys("msg","type")); checkCommand({}); // msg type , this key is valid
checkCommand就是我們最后組合出來(lái)的可以進(jìn)行校驗(yàn)的大城堡了,而且這個(gè)城堡可以定制化哦,甚至必要的時(shí)候,可以動(dòng)態(tài)定制化。
高階函數(shù)(high-order function)高階函數(shù)是函數(shù)式編程中,很重要的部分,我們先來(lái)看看它是怎么定義的。作為一個(gè)高階函數(shù),他要滿足以下定義:
高階函數(shù)一定是一等公民
以一個(gè)函數(shù)為參數(shù)
同時(shí)返回一個(gè)函數(shù)作為函數(shù)的返回值
舉一個(gè)簡(jiǎn)單的例子:
var aFunc = (function(callback){ return function(){ callback&&callback(); } })(function(){ console.log("I am a high-order function") }); aFunc();// I am a high-order function;
額,呵呵,這個(gè)例子比較無(wú)聊哈,我們看個(gè)更有意思的例子:
function calc(x){ return function(y){ return function(method){ method&&method(x)(y); } } } function add(x){ return function(y){ console.log(x+y); } } calc(1)(2)(add);//3
當(dāng)然,你再無(wú)聊點(diǎn),非要寫成這樣,也不是不可以。
function calc(x){ return function(method){ return function(y){ method&&method(x)(y); } } } calc(1)(add)(2);
其中的add方法是可自定義的。你可以把它換成任何一個(gè)你想要的函數(shù)。
柯理化函數(shù)(curry)柯理化函數(shù),是函數(shù)編程中很重要的一個(gè)方法。嗯,我們先來(lái)看看定義:
只傳遞給函數(shù)一部分參數(shù)來(lái)調(diào)用它,讓它返回一個(gè)函數(shù)去處理剩下的參數(shù)。
上文的add,calc都是柯理化的函數(shù)。
在平時(shí)的使用中,我們經(jīng)常如此使用之:
接收一個(gè)函數(shù)
返回一個(gè)只接收一個(gè)參數(shù)的函數(shù)
柯理化函數(shù)的定義是函數(shù)式編程的基礎(chǔ),我們通過(guò)返回一個(gè)閉包的方式來(lái)使得函數(shù)參數(shù)變的可以捕捉,可以傳遞,可以保存。同時(shí)也使得,函數(shù)的行為變的可以分離,可以組合。
嗯,我們知道運(yùn)算符是有方向的,函數(shù)組合的大函數(shù)也是一樣的。比如說(shuō),下面兩個(gè)函數(shù)就不一樣:
var leftdiv(x){ return function(y){ return x/y; } } var rightdiv(x){ return function(y){ return y/x; } }部分引用
我們說(shuō)到柯理化的函數(shù)可以保存參數(shù),或者說(shuō)成是保留運(yùn)算場(chǎng)景。比如說(shuō)我們?cè)谏衔呐e的add函數(shù):
var add10 = add(10); add10(1);//11
其中的add10就是部分引用,add10這個(gè)函數(shù)保留了上一次函數(shù)調(diào)用時(shí)的運(yùn)算場(chǎng)景,當(dāng)下一個(gè)參數(shù)進(jìn)來(lái)的時(shí)候,它能夠繼續(xù)運(yùn)行,并給出結(jié)果。這樣的好處是什么呢,我們可以實(shí)現(xiàn)核心運(yùn)算的前置條件校驗(yàn)。
比如說(shuō)醬:
var add = function(x){ if(!isNumber(x)) throw Error(" x must be a num"); return function(y){ if(!isNumber(y)) throw Error(" y must be a num"); return function(){ return x+y; } } }
我們?cè)诿恳淮蔚恼{(diào)用的時(shí)候,我們順便做了輸入?yún)?shù)的校驗(yàn),當(dāng)最后函數(shù)執(zhí)行的時(shí)候,我們可以確保,最后的函數(shù)執(zhí)行是可靠的,也就是該函數(shù)是純的。
組合上文在說(shuō)純函數(shù)的時(shí)候,我們就已經(jīng)說(shuō)到了組合了,這里,我們?cè)購(gòu)?qiáng)調(diào)的地方是組合函數(shù)的管道特性。就是把上一個(gè)函數(shù)的值作為下一個(gè)函數(shù)的參數(shù)。
就像醬:
var compose = function(f,g){ return function(x){ return f(g(x)); } }基于流的編程
其實(shí),對(duì)于函數(shù)式編程,我們總結(jié)其技巧的時(shí)候,發(fā)現(xiàn),其功能是圍繞于:
用函數(shù)傳遞函數(shù)
用函數(shù)構(gòu)造函數(shù)
用函數(shù)調(diào)用函數(shù)
而這三個(gè)綜合在一起,使得函數(shù)式編程能夠?qū)崿F(xiàn)基于數(shù)據(jù)流或者控制流。
鏈?zhǔn)骄幊?/b>這個(gè)我們都很熟悉啦,jquery就是這樣干的,通過(guò)返回一個(gè)自身來(lái)實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用。就像醬:
$.prototype.next(){ //do something return this; } $("li").next().next();promise
這個(gè)其實(shí)多帶帶拿出來(lái),寫一本書。所以這里就不詳細(xì)說(shuō)了。例子的話,上文也有舉getJson,這里就不舉了。
鏈?zhǔn)骄幊毯蚿romise能更好的,讓我們按照數(shù)據(jù)處理的階段去處理函數(shù),在開(kāi)始的進(jìn)行參數(shù)校驗(yàn),在加工的時(shí)候,進(jìn)行數(shù)據(jù)的加工,在最后的時(shí)候,進(jìn)行函數(shù)的顯示。
總結(jié)其實(shí),這本翻來(lái)覆去的看了好幾遍,一直想做一個(gè)總結(jié),但是并不能做的出來(lái)。因?yàn)椋覀兒苋菀装l(fā)現(xiàn),在實(shí)際的操作過(guò)程中,我們或多或少的都使用了函數(shù)式編程的一部分,我們或多或少的都在踐行函數(shù)式編程的理論,但是,如果說(shuō),我們的代碼就是使用函數(shù)式編程的時(shí)候,我們又會(huì)發(fā)現(xiàn),我們的代碼中,有很大一部分的邏輯,實(shí)在是沒(méi)辦法使用函數(shù)式編程進(jìn)行處理。所以,后面有了響應(yīng)式編程RXJs,通過(guò)訂閱和發(fā)布模式來(lái)實(shí)現(xiàn)隊(duì)列化的事件調(diào)度和資源分配,但是在實(shí)際使用過(guò)程中,要想很快的將代碼轉(zhuǎn)化成函數(shù)式編程,需要對(duì)行為邏輯有很深刻的理解和抽象,對(duì)步驟的分解,對(duì)函數(shù)的分解,對(duì)行為的分解,這個(gè)才是函數(shù)式編程中最難的部分,如何去思考你的數(shù)據(jù)發(fā)生了什么變化,你的狀態(tài)發(fā)生了什么變化,去管理你的數(shù)據(jù)和你的狀態(tài)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/92360.html
摘要:在近期看到了函數(shù)式編程這本書預(yù)售的時(shí)候就定了下來(lái)。主要目的是個(gè)人目前還是不理解什么是函數(shù)式編程。且和現(xiàn)在在學(xué)習(xí)函數(shù)式編程有莫大的關(guān)系。加速大概了解了函數(shù)式編程之后。總結(jié)看完了第一章也是可以小結(jié)一下的函數(shù)式編程。 本文章記錄本人在學(xué)習(xí) 函數(shù)式 中理解到的一些東西,加深記憶和并且整理記錄下來(lái),方便之后的復(fù)習(xí)。 在近期看到了《JavaScript函數(shù)式編程》這本書預(yù)售的時(shí)候就定了下...
摘要:設(shè)定瀏覽器屬性的屬性的方法叫做駝峰式命名是函數(shù)名方法名和對(duì)象屬性名的命名首選格式。由瀏覽器預(yù)先定義的對(duì)象被稱為宿主對(duì)象。在給某個(gè)元素添加了事件處理函數(shù)后,一旦事件發(fā)生,相應(yīng)的代碼就會(huì)執(zhí)行。 1.JavaScript是一個(gè)使網(wǎng)頁(yè)具有交互能力的程序設(shè)計(jì)語(yǔ)言。 2.設(shè)定瀏覽器屬性的屬性的方法叫做BOM. 3.駝峰式命名(myMood)是函數(shù)名、方法名和對(duì)象屬性名的命名首選格式。 4.命名變量...
摘要:事實(shí)上,每個(gè)函數(shù)實(shí)際是一個(gè)短小的腳本。先對(duì)函數(shù)做出定義再調(diào)用是一個(gè)良好的編程習(xí)慣。可以將不同的數(shù)據(jù)傳遞給它們,而它們將使用這些數(shù)據(jù)去完成預(yù)定的操作。傳遞給函數(shù)的數(shù)據(jù)稱為參數(shù)。這個(gè)例子中,變量的值將是,這個(gè)數(shù)值由函數(shù)返回。 函數(shù) 如果需要多次使用同一段代碼,可以把它們封裝成一個(gè)函數(shù)。函數(shù)就是一組允許在你的代碼里隨時(shí)調(diào)用的語(yǔ)句。事實(shí)上,每個(gè)函數(shù)實(shí)際是一個(gè)短小的腳本。 先對(duì)函數(shù)做出定義再調(diào)用...
摘要:不純的函數(shù)充滿的不確定性,在函數(shù)式編程中要盡量避免它。在以后的函數(shù)式編程中還會(huì)不斷的遇見(jiàn)它的。 一.為什么需要柯里化(curry函數(shù)) 1.先簡(jiǎn)單的介紹一下純函數(shù) 在函數(shù)式編程中純函數(shù)是其最基本的思想,所謂純函數(shù)就是一個(gè)相對(duì)不受外界影響(之所以說(shuō)相對(duì),是因?yàn)橛械臅r(shí)候需要和外界溝通,函數(shù)沒(méi)法保持所謂真正的純,但后面會(huì)有方法來(lái)解決).在高中數(shù)學(xué)中都學(xué)過(guò),函數(shù)是一種映射關(guān)系,在y=f(x)這...
摘要:限制編寫并行流,存在一些與非并行流不一樣的約定。底層框架并行流在底層沿用的框架,遞歸式的分解問(wèn)題,然后每段并行執(zhí)行,最終由合并結(jié)果,返回最后的值。 本書第六章的讀書筆記,也是我這個(gè)系列的最后一篇讀書筆記。后面7、8、9章分別講的測(cè)試、調(diào)試與重構(gòu)、設(shè)計(jì)和架構(gòu)的原則以及使用Lambda表達(dá)式編寫并發(fā)程序,因?yàn)楣P記不好整理,就不寫了,感興趣的同學(xué)自己買書來(lái)看吧。 并行化流操作 關(guān)于并行與并發(fā)...
閱讀 1534·2023-04-26 02:50
閱讀 3535·2023-04-26 00:28
閱讀 1931·2023-04-25 15:18
閱讀 3209·2021-11-24 10:31
閱讀 986·2019-08-30 13:00
閱讀 1000·2019-08-29 15:19
閱讀 1766·2019-08-29 13:09
閱讀 2975·2019-08-29 13:06