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

資訊專欄INFORMATION COLUMN

函數式編程(一)

Pink / 1341人閱讀

摘要:函數式編程不是用函數來編程,其主旨是將復雜的函數轉化為簡單的函數。所以下面用我一年級的智商對函數式編程的理解,來介紹一些函數式編程的知識和概念。

引言

javascript是一門多范式編程語言,什么叫多范式?通俗一點來講,不管是爛大街的面向對象,還是面向切面、函數式編程啥都能寫。函數式編程不是用函數來編程,其主旨是將復雜的函數轉化為簡單的函數。這兩年隨著React的火熱,函數式編程的概念也開始流行起來,RxJS、cycleJS、lodashJS、underscoreJS等多種開源庫都使用了函數式的特性,但是相信絕大部分人看完有關函數式編程的書籍,還是一臉懵逼。所以下面用我一年級的智商對函數式編程的理解,來介紹一些函數式編程的知識和概念。

純函數

純函數的定義是,對于相同的輸入,永遠會得到相同的輸出,而且沒有任何可觀察的副作用,也不依賴外部環境的狀態。

var xs = [1,2,3,4,5];

// 純的
xs.slice(0,3);
//=> [1,2,3]

// 不純的,改變了原數組的值
xs.splice(0,3);
//=> [1,2,3]

大多數有用的純函數都應有至少一個參數。所有有用的純函數都應該返回一些東西。

let addNoReturn = (x, y) => {
    let z = x+ y
}
//無用的純函數

現在你可以嘗試打開瀏覽器的控制臺,執行這樣一個函數

let add = (x, y) =>  x + y 
add(1, 2) //3

執行一次,結果是3。
現在你可以再次執行一次

add(1, 2) //3

結果還是3,再執行一次

add(1, 2) //3

結果還是3,驚不驚喜,意不意外?
再看下面一個函數

let wirteFile = (x) => {
      localStorage.setItem("font", "1")
      return x;
}

這個是純函數嗎,相同的結果也是相同的輸出啊?
顯然這個不是純函數,純函數不能修改任何外部變量,純函數沒有函數副作用
副作用可能包含,但不限于:

更改文件系統

往數據庫插入記錄

發送一個 http 請求

打印/log

DOM 查詢

看到這里你可能會把我拉黑,只有純函數我還怎么寫代碼,怎么完成需求?
在函數式編程中,你不僅僅編寫純函數。
函數式語言不能消除函數副作用,它們只能限制函數副作用。因為程序必須和真實世界交互,每一個程序總有一些部分必須是不純的。目標是減少不純代碼的數量并將它們和我們程序中的其他部分隔離。

純函數不僅降低了系統的復雜度,還有很多很棒的特性,比如可緩存性

const memorize = f => {
  const cache = {};

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

const addNumber = memorize( x => x + 1)

//第一次計算慢
addNumber(1)
//第二次有了緩存,速度快了不少
addNumber(1)

我們不用每次都自己實現memorize函數,lodash、ramda都提供了很好的封裝。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82890.html

相關文章

  • SegmentFault 技術周刊 Vol.16 - 淺入淺出 JavaScript 函數編程

    摘要:函數式編程,一看這個詞,簡直就是學院派的典范。所以這期周刊,我們就重點引入的函數式編程,淺入淺出,一窺函數式編程的思想,可能讓你對編程語言的理解更加融會貫通一些。但從根本上來說,函數式編程就是關于如使用通用的可復用函數進行組合編程。 showImg(https://segmentfault.com/img/bVGQuc); 函數式編程(Functional Programming),一...

    csRyan 評論0 收藏0
  • 編程函數編程

    摘要:聲明式編程一種編程范式,與命令式編程相對立。常見的聲明式編程語言有數據庫查詢語言,正則表達式邏輯編程函數式編程組態管理系統等。函數式編程,特別是純函數式編程,嘗試最小化狀態帶來的副作用,因此被認為是聲明式的。 編程范式與函數式編程 一、編程范式的分類 常見的編程范式有:函數式編程、程序編程、面向對象編程、指令式編程等。在面向對象編程的世界,程序是一系列相互作用(方法)的對象(Class...

    noONE 評論0 收藏0
  • 翻譯連載 |《你不知道的JS》姊妹篇 |《JavaScript 輕量級函數編程》- 第 1 章:

    摘要:所以我覺得函數式編程領域更像學者的領域。函數式編程的原則是完善的,經過了深入的研究和審查,并且可以被驗證。函數式編程是編寫可讀代碼的最有效工具之一可能還有其他。我知道很多函數式編程編程者會認為形式主義本身有助于學習。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson - 《You-Dont-Know-JS》作者 關于譯者:這是一個流淌著滬江血液...

    omgdog 評論0 收藏0
  • 函數編程

    摘要:函數式編程的準則不依賴于外部的數據,而且也不改變外部數據的值,而是返回一個新的值給你。函數式編程利用純函數的無狀態性,它的好處非常多結果可預期利于測試利于復用利于并發,但一個系統工程的代碼,是不可能全部采用純函數來寫的。 什么是函數式編程 函數式編程是一種編程范式,常見的編程范式有以下三種: 命令式編程 聲明式編程 函數式編程 函數式編程的本質是將計算描述為一種表達式求值。在函數式...

    羅志環 評論0 收藏0
  • javascript 函數編程思想

    摘要:今天這篇文章主要介紹函數式編程的思想。函數式編程通過最小化變化使得代碼更易理解。在函數式編程里面,組合是一個非常非常非常重要的思想。可以看到函數式編程在開發中具有聲明模式。而函數式編程旨在盡可能的提高代碼的無狀態性和不變性。 最開始接觸函數式編程的時候是在小米工作的時候,那個時候看老大以前寫的代碼各種 compose,然后一些 ramda 的一些工具函數,看著很吃力,然后極力吐槽函數式...

    YPHP 評論0 收藏0
  • JavaScript 函數編程

    摘要:函數式編程的哲學就是假定副作用是造成不正當行為的主要原因。函數組合面向對象通常被比喻為名詞,而函數式編程是動詞。尾遞歸優化函數式編程語言中因為不可變數據結構的原因,沒辦法實現循環。 零、前言 說到函數式編程,想必各位或多或少都有所耳聞,然而對于函數式的內涵和本質可能又有些說不清楚。 所以本文希望針對工程師,從應用(而非學術)的角度將函數式編程相關思想和實踐(以 JavaScript 為...

    hoohack 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<