国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

《JavaScript函數(shù)式編程》讀書筆記

mochixuan / 783人閱讀

摘要:而函數(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)
    }

這段代碼里,作為變量存在的asay,是我們所熟知的數(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)容是什么,而更在乎其變化。

額,當(dāng)然,嚴(yán)格意義上來(lái)說(shuō),其實(shí),這個(gè)sayHello的原型是Object,在瀏覽器端,追溯他的原型鏈,它是掛在window對(duì)象下面的。

專注于過(guò)程本身

在實(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ù)就是

純函數(shù)(Pure Function)與外界交換數(shù)據(jù)只有唯一渠道——參數(shù)和返回值。其在邏輯上沒(méi)有副作用

可預(yù)見(jiàn)性

簡(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

相關(guān)文章

  • JS函數(shù)編程讀書筆記 - 1

    摘要:在近期看到了函數(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í)候就定了下...

    G9YH 評(píng)論0 收藏0
  • javascript dom 編程讀書筆記

    摘要:設(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.命名變量...

    cyixlq 評(píng)論0 收藏0
  • JavaScript Dom編程藝術(shù)》讀書筆記(四)

    摘要:事實(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)用...

    JellyBool 評(píng)論0 收藏0
  • js函數(shù)編程之一個(gè)實(shí)用的工具curry函數(shù)(js函數(shù)編程讀書筆記

    摘要:不純的函數(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)這...

    TNFE 評(píng)論0 收藏0
  • 「Java 8 函數(shù)編程讀書筆記——數(shù)據(jù)并行化

    摘要:限制編寫并行流,存在一些與非并行流不一樣的約定。底層框架并行流在底層沿用的框架,遞歸式的分解問(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ā)...

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

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

0條評(píng)論

mochixuan

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<