Swift新特性之柯里化函數(shù)

前言

前段時(shí)間在iOS技術(shù)群里面有人提到柯里化焕参,當(dāng)時(shí)有點(diǎn)懵,也沒有管齿梁。最近項(xiàng)目不緊張了催植,決定來研究研究肮蛹。順便和大家分享一下我對(duì)Currying的理解。

什么是柯里化函數(shù)创南?

柯里化伦忠,又稱部分求值,是一種函數(shù)式編程思想稿辙,就是把接收多個(gè)參數(shù)的函數(shù)轉(zhuǎn)換成接收一個(gè)單一參數(shù)的函數(shù)昆码,并且返回一個(gè)接受余下參數(shù)的新函數(shù)技術(shù)。

柯里化函數(shù)的運(yùn)用

舉個(gè)簡(jiǎn)單的例子邻储,下面的函數(shù)簡(jiǎn)單的將輸入的數(shù)加1:

func addOne(num : Int) -> Int {
    return num + 1
}

上面這個(gè)函數(shù)滿足我們的需求赋咽,實(shí)現(xiàn)了將輸入的值加1,但是如果要實(shí)現(xiàn)加2芥备,加3冬耿,加n呢。這個(gè)時(shí)候我們需要定義一個(gè)通用的函數(shù)萌壳。有人可能想到傳入2個(gè)參數(shù)的方式去實(shí)現(xiàn)亦镶,比如說:

func add(num1 : Int, num2 : Int) -> Int {
    return num1 + num2
}

當(dāng)然這種方法是可以的,但是我要向大家推薦的是另一種寫法袱瓮,那就是用函數(shù)式編程的思想去解決缤骨,也是定義一個(gè)函數(shù),這個(gè)函數(shù)它將接收需要與數(shù)字相加的數(shù)尺借,并返回一個(gè)函數(shù)绊起,返回的函數(shù)將接收輸入數(shù)字本身,然后進(jìn)行操作:

func addTo(adder: Int)-> Int -> Int {
    return {
        num in
        return num + adder
    }
}
let addTwo = addTo(2)//實(shí)現(xiàn)一個(gè)數(shù)加2 燎斩,這里就是接收需要相加的數(shù)字虱歪,并且返回一個(gè)函數(shù) Int -> Int
let result = addTwo(4)//返回的函數(shù)將接收輸入的數(shù)字,也就是我們這里的4.然后進(jìn)行操作返回結(jié)果
print(result)//6

如果沒有swift開發(fā)經(jīng)驗(yàn)的話栅表,可能看到這里會(huì)有點(diǎn)懵笋鄙,那下面我將換一種簡(jiǎn)單明了的寫法,順便分享一下它的實(shí)現(xiàn)原理:

//定義一個(gè)接收參數(shù)num1怪瓶,返回一個(gè)接收參數(shù)num2 的函數(shù)萧落,并且這個(gè)函數(shù)的返回值是為Int類型的函數(shù)
func add(num1 : Int) -> (num2 : Int) -> Int {
    //一個(gè)接收參數(shù)num2的函數(shù),并且有返回結(jié)果為Int類型的函數(shù)
    return { (num2: Int) -> Int in
        return num1 + num2
    }
}

使用柯里化函數(shù)的注意事項(xiàng)

1洗贰、必須按照參數(shù)的定義順序來調(diào)用找岖,否則容易報(bào)錯(cuò)
2、柯里化函數(shù)的函數(shù)體只會(huì)被執(zhí)行一次敛滋,只會(huì)在調(diào)用完最后一個(gè)參數(shù)的時(shí)候執(zhí)行柯化里函數(shù)體许布,這個(gè)可以打斷點(diǎn)調(diào)試。

//不會(huì)調(diào)用柯里化函數(shù)
let addTwo = addTo(2)//實(shí)現(xiàn)一個(gè)數(shù)加2 绎晃,這里就是接收需要相加的數(shù)字爹脾,并且返回一個(gè)函數(shù) Int -> Int
print(addTwo)//(Function)
//執(zhí)行柯里化函數(shù)體
let result = addTwo(4)//返回的函數(shù)將接收輸入的數(shù)字帖旨,也就是我們這里的4.然后進(jìn)行操作返回結(jié)果
print(result)//6

柯里化函數(shù)的優(yōu)點(diǎn)

1、代碼簡(jiǎn)潔
2灵妨、提高了代碼的復(fù)用率
3解阅、每個(gè)函數(shù)都是一個(gè)單獨(dú)的模塊,很容易進(jìn)行單元測(cè)試
4泌霍、不用修改原來的值货抄,因?yàn)榉祷氐亩际切碌闹?/p>

柯里化函數(shù)的實(shí)用性

1、實(shí)用性一:復(fù)用性
需求1:地圖類產(chǎn)品朱转,很多界面都有相同的功能模塊蟹地,比如搜索框。
我們可以利用柯里化函數(shù)藤为,來組裝界面怪与,把界面分成一個(gè)個(gè)小模塊,這樣其他界面有相同的模塊缅疟,直接運(yùn)用模塊代碼分别,去重新組裝下就好了。

2存淫、實(shí)用性二:延遲性耘斩,柯里化函數(shù)代碼需要前面的方法調(diào)用完成之后,才會(huì)來到柯里化函數(shù)代碼中桅咆。
需求2:閱讀類產(chǎn)品括授,一個(gè)界面的顯示,依賴于數(shù)據(jù)岩饼,需要加載完數(shù)據(jù)之后荚虚,才能判斷界面顯示。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末籍茧,一起剝皮案震驚了整個(gè)濱河市版述,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌硕糊,老刑警劉巖院水,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腊徙,死亡現(xiàn)場(chǎng)離奇詭異简十,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)撬腾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門螟蝙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人民傻,你說我怎么就攤上這事胰默〕“撸” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵牵署,是天一觀的道長漏隐。 經(jīng)常有香客問我,道長奴迅,這世上最難降的妖魔是什么青责? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮取具,結(jié)果婚禮上脖隶,老公的妹妹穿的比我還像新娘。我一直安慰自己暇检,他們只是感情好产阱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著块仆,像睡著了一般构蹬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上榨乎,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天怎燥,我揣著相機(jī)與錄音,去河邊找鬼蜜暑。 笑死铐姚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肛捍。 我是一名探鬼主播隐绵,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼拙毫!你這毒婦竟也來了依许?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤缀蹄,失蹤者是張志新(化名)和其女友劉穎峭跳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缺前,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛀醉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衅码。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拯刁。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖逝段,靈堂內(nèi)的尸體忽然破棺而出垛玻,到底是詐尸還是另有隱情割捅,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布帚桩,位于F島的核電站亿驾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏账嚎。R本人自食惡果不足惜颊乘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望醉锄。 院中可真熱鬧乏悄,春花似錦、人聲如沸恳不。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烟勋。三九已至规求,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卵惦,已是汗流浹背阻肿。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沮尿,地道東北人丛塌。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像畜疾,于是被迫代替她去往敵國和親赴邻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容