摘要:函數(shù)式編程,一看這個(gè)詞,簡(jiǎn)直就是學(xué)院派的典范。所以這期周刊,我們就重點(diǎn)引入的函數(shù)式編程,淺入淺出,一窺函數(shù)式編程的思想,可能讓你對(duì)編程語言的理解更加融會(huì)貫通一些。但從根本上來說,函數(shù)式編程就是關(guān)于如使用通用的可復(fù)用函數(shù)進(jìn)行組合編程。
函數(shù)式編程(Functional Programming),一看這個(gè)詞,簡(jiǎn)直就是學(xué)院派的典范。
以至于從 Lisp 的創(chuàng)世,到 Scheme、Haskell、Clean、Erlang、Miranda、Scala、LOGO、Clojure、Mathematica 甚至 R,它們一出生就站在了鄙視鏈的頂端,尤其是非純函數(shù)式的 Lisp 老祖和純函數(shù)式的集大成者 Haskell。就如段子里說的,一群程序員自我介紹,當(dāng)聽到“我是寫 Lisp 的…”這一句,所有人的注意力都會(huì)被吸引。簡(jiǎn)直是眾多程序員想要裝逼的頂峰,可見一斑。
學(xué)院派的語言方法似乎只有大學(xué)研究里才會(huì)使用,但隨著技術(shù)和時(shí)代的發(fā)展,JavaScript,這種典型的多范式編程語言,也由面向?qū)ο鬄榻^對(duì)主導(dǎo)逐漸納入各種函數(shù)式編程的特性,這兩年的 React、TypeScript、Immutable、underscore、Elm 等等,紛紛加入了函數(shù)式編程的大潮。所以這期周刊,我們就重點(diǎn)引入 JavaScript 的函數(shù)式編程,淺入淺出,一窺函數(shù)式編程的思想,可能讓你對(duì)編程語言的理解更加融會(huì)貫通一些。
淺入1. 什么是函數(shù)式編程?
JavaScript 函數(shù)式編程(一) 丨 JavaScript 函數(shù)式編程(二) // 王偉嘉
這兩篇將 JS 函數(shù)式編程的典型特性“1. 純函數(shù)概念,函數(shù)柯里化和函數(shù)的組合;2. 容器和 Functor,Maybe,Monad,Either 以及 IO”由淺及深,一個(gè)個(gè)地做了介紹,非常不錯(cuò)的入門文章。
「所謂的純函數(shù)就是,對(duì)于相同的輸入,永遠(yuǎn)會(huì)得到相同的輸出,而且沒有任何可觀察的副作用,也不依賴外部環(huán)境的狀態(tài)?!?/p>
2. 函數(shù)式思想的理解
《JavaScript 函數(shù)式編程》讀書筆記 // homker
這是作者對(duì)《JavaScript 函數(shù)式編程》的理解,JS 為什么要用函數(shù)式編程(數(shù)據(jù)和行為的關(guān)系、專注于過程本身),如何使用函數(shù)式編程(一等公民、純函數(shù)、可組合、高階函數(shù)、基于流的編程),可以讓你更深入地理解 JS 大量引入函數(shù)式方法的思想。
譯丨JavaScript 與函數(shù)式編程 // 文藺
現(xiàn)在,來進(jìn)行更細(xì)節(jié)的分析和理解
展現(xiàn)另一面的函數(shù)式編程思維:強(qiáng)調(diào)將程序狀態(tài)變化(即副作用 side effect)的次數(shù)減到最小,鼓勵(lì)使用不可變數(shù)據(jù)(immutable data)和純函數(shù)(pure functions)(“純”意味著沒有副作用的),更傾向于使用聲明式的風(fēng)格(讓代碼更干凈,可讀性更強(qiáng),推理起來更簡(jiǎn)單)。
3. 特性各個(gè)了解
在下函數(shù)式編程有何貴干 // 力譜宿云
示例代碼清晰,簡(jiǎn)單明了,讓你快速了解 FP 的諸多特性,接下來,再一一分解。
譯丨JavaScript 中的不可變性(Immutability) // leftstick
譯丨淺入淺出 Monads // leftstick
JavaScript 也玩私人訂制——玩轉(zhuǎn)函數(shù)柯里化 // 條件狀語從句
函數(shù)式編程中局部應(yīng)用(Partial Application)和局部套用(Currying)的區(qū)別 // n?i?g?h?t?i?r?e?
函數(shù)式編程之柯里化和組合詳解 // 橘子小睿
前面提到的純函數(shù)、函數(shù)柯里化、函數(shù)的組合、偏函數(shù)、容器、Functor、Monad、IO 等等,這里都有分別的詳細(xì)講解。
淺出4. 各 JS 方言都有了哪些實(shí)踐?
譯丨函數(shù)式 TypeScript // 文藺
「談到函數(shù)式編程時(shí),可能常被提到的是機(jī)制、方法,而不是核心原則。但從根本上來說,函數(shù)式編程就是關(guān)于如使用通用的可復(fù)用函數(shù)進(jìn)行組合編程。」——作者在重構(gòu) TypeScript 代碼時(shí)使用函數(shù)式的一些思考
函數(shù)式編程——入門筆記與 React 實(shí)踐 // kpaxqin
Immutable 詳解及 React 中實(shí)踐 // Cam
Redux 入坑進(jìn)階 - 源碼解析 // ecmadao
React.js 的代碼中包含了大量函數(shù)式思想,比如 Immutable,比如 Redux 的柯里化函數(shù)以及代碼組合,不妨來看看。
Elm 入門實(shí)踐系列 by @kpaxqin :(一)基礎(chǔ)篇 丨 (二)類型篇 丨 (三)進(jìn)階篇
笨辦法學(xué)函數(shù)式編程:Elm 初體驗(yàn) // Integ
如果你打算開始函數(shù)式編程,晦澀的 Monad/Functor 們可能也需要?jiǎng)邮謱扅c(diǎn)東西來熟悉,而隨著整個(gè) React 社區(qū)往函數(shù)式方向發(fā)展,Elm 作為前端函數(shù)式編程的先驅(qū)和風(fēng)向標(biāo),毫無疑問是值得去學(xué)習(xí)和借鑒的。這兩個(gè)系列,一步步地帶你了解如何使用 Elm 構(gòu)建應(yīng)用。
5. 函數(shù)式的思想在其他語言中的體現(xiàn)
函數(shù)式編程在實(shí)際生產(chǎn)中發(fā)揮著巨大的作用,越來越多的語言加入閉包,匿名函數(shù)等非常典型的函數(shù)式編程的特性,從某種程度上來講,函數(shù)式編程正在逐步“同化”命令式編程。
Swift - Swift 中的柯里化 Currying:Swift 柯里化特性的簡(jiǎn)單了解
Scala - Scala 類型參數(shù):多范式語言的典范
Java - Java8 Lambda 本質(zhì)論 丨 正交設(shè)計(jì) 丨 Write Lean Programs:Java 的設(shè)計(jì)模式、λ 演算、設(shè)計(jì)思想
Scheme - 如何實(shí)現(xiàn)一個(gè)沒有名字的遞歸函數(shù):一個(gè)遞歸引發(fā)的思考 - “當(dāng)函數(shù)在還沒有定義完整時(shí),為什么能夠直接調(diào)用的呢?”
6. 補(bǔ)充閱讀
JavaScript 函數(shù)式真正的淺析
JavaScript 數(shù)組分組的實(shí)現(xiàn)
Immutable.js 初識(shí)
js 函數(shù)式編程之函數(shù)柯里化
合理的使用純函數(shù)式編程
淺談函數(shù)式編程和函數(shù)響應(yīng)式編程
正交設(shè)計(jì),OO 與 SOLID
(本期完)
# SegmentFault 技術(shù)周刊 #
「技術(shù)周刊」是社區(qū)特別推出的技術(shù)內(nèi)容系列,一周一主題。周刊篩選的每篇內(nèi)容,是作者的獨(dú)到見解,踩坑總結(jié)和經(jīng)驗(yàn)分享。
每周二更新,歡迎「關(guān)注」或者「訂閱」。大家也可以在評(píng)論處留言自己感興趣的主題,推薦主題相關(guān)的優(yōu)秀文章。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/91351.html
摘要:我之前寫過關(guān)于的文章,,最近在工作中用到比較多了,頓時(shí)覺得確實(shí)是比較優(yōu)秀的一個(gè)。 我之前寫過關(guān)于cypress的文章,https://segmentfault.com/a/11...,最近在工作中用到cypress比較多了,頓時(shí)覺得cypress確實(shí)是比較優(yōu)秀的一個(gè)。 1. 軟件安裝. 2. 安裝cypress 安裝cypress客戶端:http://download.cypress...
摘要:后文將圍繞做一些介紹。盡管如此,的使用對(duì)新手而言仍然充滿了困難。本系列文章基本為個(gè)人見解,難免有錯(cuò)誤與誤解,如有客觀錯(cuò)誤歡迎提出。 前言 說到Android的污點(diǎn)分析框架,網(wǎng)上的搜索結(jié)果大多指向靜態(tài)的FlowDroid與動(dòng)態(tài)的TaintDroid。盡管由于加固、混淆等技術(shù)使得針對(duì)Android的靜態(tài)分析越來越困難,但靜態(tài)分析的無先驗(yàn)分析能力無法被動(dòng)態(tài)分析取代,使得靜態(tài)分析仍有發(fā)揮空間。...
摘要:接受另一個(gè)函數(shù)作為參數(shù),然后用接受的這個(gè)新函數(shù)處理,將結(jié)果再次傳給,最后將實(shí)例化的新對(duì)象返回。空值檢查就是個(gè)不錯(cuò)的例子這個(gè)實(shí)現(xiàn)里,只在為合法值非空時(shí),傳入。但不論怎么變化,她們也都和一樣遵守上面提到的規(guī)則。 大多數(shù)關(guān)于monad的教程都和老太太的裹腳布一樣,又臭、又長(zhǎng),說不清、道不明。當(dāng)然我也不偉大,沒法保證我寫的一定更明了,更生動(dòng),甚至更屌?不過我至少可以確定,我這篇更簡(jiǎn)潔。浪費(fèi)不了...
摘要:別名相當(dāng)于前面先引入了路由插件,然后顯式聲明要用路由。注意到,等都是頁面也可以是組件,接著注冊(cè)路由器,然后開始配置路由。 搭建環(huán)境 工欲善其事必先利其器,我們的學(xué)習(xí)計(jì)劃從學(xué)會(huì)搭建Vue所需要的環(huán)境開始,node和npm的環(huán)境不用說是必須的,現(xiàn)在前端流程化很熱門,基本上新的技術(shù)都會(huì)在這套流程的基礎(chǔ)上做開發(fā),我們只需要站在巨人的XX上裝*就可以了。我假設(shè)你的機(jī)子上已經(jīng)有了最新的node和n...
閱讀 3787·2021-11-24 09:39
閱讀 2988·2021-11-16 11:49
閱讀 2112·2019-08-30 13:54
閱讀 1132·2019-08-30 13:03
閱讀 1118·2019-08-30 11:10
閱讀 749·2019-08-29 17:10
閱讀 1276·2019-08-29 15:04
閱讀 1241·2019-08-29 13:02