日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转载] 纯函数和函数柯里化

發布時間:2025/3/11 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转载] 纯函数和函数柯里化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考鏈接: 用示例編寫Java柯里化Currying函數

文章目錄

?純函數什么是純函數純函數例子非純函數例子

? ?函數柯里化函數柯里化簡單例子參數復用

??

?

?

?

純函數?

什么是純函數?

?

?如果函數的調用參數相同,則永遠返回相同的結果。它不依賴于程序執行期間函數外部任何狀態或數據的變化,必須只依賴于其輸入參數。?

?該函數不會產生任何可觀察的副作用,例如網絡請求,輸入和輸出設備或數據突變(mutation)。?

?

這就是純的函數。 如果一個函數符合上述 2 個要求,它就是純函數。 你可能在過去甚至無意地情況下編寫過純函數。?

純函數例子?

function getSum(num) {

? ? return num * 2 + num

}

?

它符合我們所說的兩條純函數的定義。不依賴于任何外部輸入,不改變任何外部數據、沒有副作用。 即使你用同樣的輸入運行運行這個函數 100,000,000 次它依舊產生同樣的結果。?

非純函數例子?

let num = 10;

function getSum(num2) {

? ? return num + num2

}

?

在這里函數的計算結果取決于外部num變量,而非函數不能依賴外部任何變量,所以它就是非純函數?

函數柯里化?

?

?把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,并且返回接受余下的參數而且返回結果的新函數的技術。?

?

函數柯里化簡單例子?

// 普通的add函數

function add(x, y) {

? ? return x + y

}

?

// Currying后

function curryingAdd(x) {

? ? return function (y) {

? ? ? ? return x + y

? ? }

}

?

add(1, 2)? ? ? ? ? ?// 3

curryingAdd(1)(2)? ?// 3

?

參數復用?

// 正常正則驗證字符串 reg.test(txt)

?

// 函數封裝后

function check(reg, txt) {

? ? return reg.test(txt)

}

?

check(/\d+/g, 'test')? ? ? ?//false

check(/[a-z]+/g, 'test')? ? //true

?

// Currying后

function curryingCheck(reg) {

? ? return function(txt) {

? ? ? ? return reg.test(txt)

? ? }

}

?

var hasNumber = curryingCheck(/\d+/g)

var hasLetter = curryingCheck(/[a-z]+/g)

?

hasNumber('test1')? ? ? // true

hasNumber('testtest')? ?// false

hasLetter('21212')? ? ? // false

?

上面的示例是一個正則的校驗,正常來說直接調用check函數就可以了,但是如果我有很多地方都要校驗是否有數字,其實就是需要將第一個參數reg進行復用,這樣別的地方就能夠直接調用hasNumber,hasLetter等函數,讓參數能夠復用,調用起來也更方便。

總結

以上是生活随笔為你收集整理的[转载] 纯函数和函数柯里化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。