Swift 中的函數(shù)式編程

作者:Natasha The Robot,原文鏈接来氧,原文日期:2015/11/13
譯者:小袋子舒憾;校對(duì):numbbbbb;定稿:numbbbbb

Swift 一個(gè)強(qiáng)有力的語(yǔ)言特性就是能夠用多樣的函數(shù)式風(fēng)格去編寫代碼居灯。這在社區(qū)看來(lái)非常激動(dòng)人心祭务。

我在去年年底花費(fèi)了一些時(shí)間學(xué)習(xí)函數(shù)式編程,所以我可以寫更好的 Swift 代碼怪嫌。因此义锥,我非常推薦你們也花時(shí)間去學(xué)習(xí)一下!

另外岩灭,我非常推薦推薦你們?nèi)タ?Functional Swift conference上的每一個(gè)視頻拌倍。

所以在花了這么多時(shí)間后,我想要總結(jié)一下個(gè)人有關(guān)于函數(shù)式編程在 Swift 應(yīng)用的一些思考。

跟著概念走

函數(shù)式編程是令人生畏的柱恤,這要?dú)w咎于單子(monads)和 函數(shù)子(functors)数初!然而,一旦你領(lǐng)悟了它的核心概念梗顺,那么函數(shù)式編程的思想會(huì)超級(jí)簡(jiǎn)單:

“函數(shù)式編程是一個(gè)編程范例…它把計(jì)算作為數(shù)學(xué)函數(shù)的評(píng)估泡孩,并避免改變狀態(tài)和可變數(shù)據(jù)∷掳”— 維基百科

所以核心就是你應(yīng)該用數(shù)學(xué)的方式去編寫代碼仑鸥。你的函數(shù)應(yīng)該有清晰的輸入和輸出,并且不會(huì)像可變對(duì)象一樣有全局副作用矗漾。這就是了锈候!

避免可變狀態(tài)

這和上述的注意點(diǎn)類似。函數(shù)式編程要編寫的是沒有副作用的數(shù)學(xué)代碼敞贡。

在 Swift 中使用結(jié)構(gòu)體和協(xié)議幫助你避免可變狀態(tài)泵琳。

我極度推薦觀看 @andy_matuschakControlling Complexity in Swift,這可以讓你理解如何去實(shí)現(xiàn)以及最終的代碼會(huì)如何地強(qiáng)大誊役。

可讀性第一

我發(fā)現(xiàn)很多高級(jí)的函數(shù)式代碼获列,通常由于五個(gè)以上的習(xí)慣性編程而變得特別難以閱讀。如果你遵從函數(shù)式編程的概念蛔垢,有很多方法讓你的代碼變得更清楚击孩。

但是在今天結(jié)束之前,還要多說(shuō)一句鹏漆,如果你在一個(gè)團(tuán)隊(duì)中工作巩梢,最重要的事就是讓代碼可讀性更強(qiáng)。如果一個(gè)內(nèi)部或者一個(gè)新的開發(fā)者加入你們的團(tuán)隊(duì)艺玲,他們會(huì)不會(huì)完全迷失了括蝠?如果你專注于編寫易讀的代碼(取代好玩和花哨的寫法),他們可能會(huì)很快就有產(chǎn)出饭聚。

記住一點(diǎn)忌警,可讀性的優(yōu)先級(jí)永遠(yuǎn)比花哨的代碼高(除非你的目標(biāo)就是用一個(gè)好玩的副作用去實(shí)現(xiàn)好玩和花哨的程序)。

不要和 framework 作對(duì)

當(dāng)然秒梳,在 iOS 編程中法绵,由于 Cocoa framework 的建立和用戶的輸入輸出,沒有副作用顯然是不可能的(在純粹的數(shù)學(xué)世界酪碘,確實(shí)存在完全沒有外部副作用朋譬,但那不是我們生活的世界!)兴垦。

例如徙赢,如果你創(chuàng)建了一個(gè)通用的轉(zhuǎn)換器(formatter)(例如貨幣轉(zhuǎn)換器)庭呜,并用在代碼中的一些地方,用單例是一個(gè)很好的方法犀忱。你還必須為UI Layer 使用 UIViewControllers 以及 UIViews募谎。總有辦法去脫離你的邏輯阴汇,進(jìn)而讓很好的不可變組件去幫助你可變化這些東西数冬,但是不要過火地把 freamwork 改變?yōu)槊婺咳牵勺x,不可讀)的狀態(tài)搀庶。

深入學(xué)習(xí)函數(shù)式編程

再次強(qiáng)調(diào)拐纱,你不應(yīng)該執(zhí)著于在你的 Swift 代碼中使用花哨的技巧(除非你只是為了試驗(yàn)、或者好玩)哥倔。我非常推薦深入學(xué)習(xí)函數(shù)式編程的思想秸架,從而理解那些高級(jí)概念,并且更好地應(yīng)用在你的代碼中咆蒿。

推薦閱讀 Functional Programming in Swift 东抹!這里有更多的資源去幫助你開始學(xué)習(xí)!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沃测,一起剝皮案震驚了整個(gè)濱河市缭黔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蒂破,老刑警劉巖馏谨,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異附迷,居然都是意外死亡惧互,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門喇伯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)喊儡,“玉大人,你說(shuō)我怎么就攤上這事艘刚」芟” “怎么了截珍?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵攀甚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我岗喉,道長(zhǎng)秋度,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任钱床,我火速辦了婚禮荚斯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己事期,他們只是感情好滥壕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著兽泣,像睡著了一般绎橘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唠倦,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天称鳞,我揣著相機(jī)與錄音,去河邊找鬼稠鼻。 笑死冈止,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的候齿。 我是一名探鬼主播熙暴,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼慌盯!你這毒婦竟也來(lái)了怨咪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤润匙,失蹤者是張志新(化名)和其女友劉穎诗眨,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孕讳,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡匠楚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厂财。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芋簿。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖璃饱,靈堂內(nèi)的尸體忽然破棺而出与斤,到底是詐尸還是另有隱情,我是刑警寧澤荚恶,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布撩穿,位于F島的核電站,受9級(jí)特大地震影響谒撼,放射性物質(zhì)發(fā)生泄漏食寡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一廓潜、第九天 我趴在偏房一處隱蔽的房頂上張望抵皱。 院中可真熱鬧善榛,春花似錦、人聲如沸呻畸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伤为。三九已至味滞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钮呀,已是汗流浹背剑鞍。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爽醋,地道東北人蚁署。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蚂四,于是被迫代替她去往敵國(guó)和親齿穗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谱醇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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