從函數式編程到Ramda函數庫(二)

  Ramda 基本的數據結構都是原生 JavaScript 對象,咱們經常使用的集合是 JavaScript 的數組。Ramda 還保留了許多其餘原生 JavaScript 特性,例如,函數是具備屬性的對象。javascript

  今天我來講說javascript函數式的方法庫--Ramda。Ramda主要特性以下:java

  1. Ramda 強調更加純粹的函數式風格。數據不變性和函數無反作用是其核心設計理念。這能夠幫助你使用簡潔、優雅的代碼來完成工做。
  2. Ramda 函數自己都是自動柯里化的。這可讓你在只提供部分參數的狀況下,輕鬆地在已有函數的基礎上建立新函數。
  3. Ramda 函數參數的排列順序更便於柯里化。要操做的數據一般在最後面。

  Ramda的api很是的實用且中文文檔更新迅速,相信使用過Ramda的童鞋都已經喜歡這個庫了。這裏感謝Ramda中文文檔的維護者王增迪先生,這個推薦王增迪先生的QQ討論羣 114706031,歡迎你們在此羣討論一切與函數式編程相關的問題。編程

Ramda的簡單使用

  Ramda的安裝這裏就很少說,文檔很詳細。下面以R.equals()、R.zip()和R.useWith()方法來打來Ramda的大門。api

1.R.equals():判斷兩個值是否相等(支持對象的對比)

R.equals(5,5) // => true 函數多參比較
R.equals(5)(5) // => true 柯里化支持函數單參比較
R.equals(4)('8') // => false
R.equals([])([]) // => true 支持對象對

  經過一個函數就能夠優雅的判斷對象是否相等,省去了繁瑣的對象對比;數組

2.R.zip():將兩個數組相同索引位置結合,組成新的數組(數字長度與兩個數組較短的那個長度相同)

R.zip([1,2])(['a','b']) // => [[1,'a'],[2,'b']] 長度爲2
R.zip([1,2,3])(['a','b']) // => [[1,'a'],[2,'b']] 長度爲2,由於兩個數組較短的那個長度爲2

  對於常常操縱數組的人來講,這是一個經常使用且實用的小方法,讓咱們避開了顯式的使用循環對代碼形成的不整潔。數據結構

3.R.useWith():接受一個函數fn和一個函數數fnlist組做爲參數,返回柯里化函數,該函數接受的參數先分別通過fnlist,獲得的結果數組做爲fn的參數。下面實現平方和計算

let square = x => x * x;
let result = R.useWith(R.add,[square,square]);
result(3,4); // => 25

  Ramda的做者幾乎整理了全部好用的小方法便於咱們計算。
  我這裏只是扔個轉頭,相信你們已經在腦海裏有了初步的認識,而且已經意識到本身的代碼的某些地方是否是應該作一些修改。函數式編程

  其實我想說的就這個多,函數式編程和Ramda當然有不少優勢,對於常常操字符串、數組、對象和方法的代碼來講,能夠減小代碼量,讓代碼整齊劃一,對於方法庫的編寫也是同樣。可是對於不多字符串、數組、對象和方法的代碼來講,使用這些有刻意增長代碼難度的嫌疑。因此權衡使用函數式編程。函數

 

原創博客:轉載請註明從函數式編程到Ramda函數庫(二)spa

相關文章
相關標籤/搜索