> 關於譯者:這是一個流淌著滬江血液的純粹工程:認真,是 HTML 最堅實的梁柱;分享,是 CSS 里最閃耀的一瞥;總結,是 JavaScript 中最嚴謹的邏輯。經過捶打磨練,成就了本書的中文版。本書包含了函數式編程之精髓,希望可以幫助大家在學習函數式編程的道路上走的更順暢。比心。 本書主要探... ...
原文地址:Functional-Light-JS
譯者團隊(排名不分先後):阿希、blueken、brucecham、cfanlife、dail、kyoko-df、l3ve、lilins、LittlePineapple、MatildaJin、冬青、pobusama、Cherry、蘿蔔、vavd317、vivaxy、萌萌、zhouyao
關於譯者:這是一個流淌著滬江血液的純粹工程:認真,是 HTML 最堅實的梁柱;分享,是 CSS 里最閃耀的一瞥;總結,是 JavaScript 中最嚴謹的邏輯。經過捶打磨練,成就了本書的中文版。本書包含了函數式編程之精髓,希望可以幫助大家在學習函數式編程的道路上走的更順暢。比心。
本書主要探索函數式編程[1](FP)的核心思想。在此過程中,作者不會執著於使用大量複雜的概念來進行詮釋,這也是本書的特別之處。我們在 JavaScript 中應用的僅僅是一套基本的函數式編程概念的子集。我稱之為“輕量級函數式編程(FLP)”。
註釋: 題目中使用了“輕量”二字,然而這並不是一本“輕鬆的”“入門級”書籍。本書是嚴謹的,充斥著各種複雜的細節,適合擁有扎實 JS 知識基礎的閱讀者進行研讀。“輕量”意味著範圍縮小。通常來說,關於函數式編程的 JavaScript 書籍都熱衷於拓展閱讀者的知識面,並企圖覆蓋更多的知識點。而本書則對於每一個話題都進行了深入的探究,儘管這種探究是小範圍進行的。
讓我們面對這個事實:除非你已經是函數式編程高手中的一員(至少我不是!),否則類似“一個單子僅僅是自函子中的么半群”這類說法對我們來說毫無意義。
這並不是說,各種複雜繁瑣的概念是無意義的,更不是說,函數式編程者濫用了它們。一旦你完全掌握了輕量的函數式編程內容,你將會/但願會想要對函數式編程的各種概念進行更正式更系統的學習,並且你一定會對它們的意義和原因有更深入的理解。
但是我更想要讓你能夠現在就把一些函數式編程的基礎運用到 JavaScript 編程過程中去,因為我相信這會幫助你寫出更優秀的,更符合邏輯的代碼。
更多關於本書背後的動機和各種觀點討論,請參看[前言]。
JavaScript 輕量級函數式編程
目錄
- 引言 (by Brian Lonsdorf aka "Prof Frisby")
- 前言
- 第 1 章:為什麼使用函數式編程? * 置信度 * 交流渠道 * 可讀性曲線 * 接受 * 你不需要它 * 資源
* 書籍推薦
* 博客和站點
* 一些庫 * 總結 - 第 2 章:函數基礎 * 什麼是函數?
* 簡要的數學回顧
* 函數 vs 程式 * 函數輸入
* 輸入計數
* 隨著輸入而變化的函數 * 函數輸出
* 提前 return
* 未 return 的輸出 * 函數功能
* 保持作用域 * 句法
* 什麼是名稱?
* 沒有 function 的函數 * 來說說 This ? * 總結 - 第 3 章:管理函數的輸入(Inputs) * 立即傳參和稍後傳參
* bind(..)
* 將實參順序顛倒 * 一次傳一個
* 柯里化和偏應用有什麼用?
* 如何柯里化多個實參?
* 反柯里化 * 只要一個實參
* 傳一個返回一個
* 恆定參數 * 擴展在參數中的妙用 * 參數順序的那些事兒
* 屬性擴展 * 無形參風格 * 總結 - 第 4 章:組合函數 * 輸出到輸入
* 製造機器
* 組合的變體
* 通用組合
* 不同的實現 * 重排序組合 * 抽象
* 將組合當作抽象 * 回顧形參 * 總結 - 第 5 章:減少副作用 * 什麼是副作用
* 潛在的原因
* I/O 效果
* 其他的錯誤 * 一次就好
* 數學中的冪等
* 編程中的冪等 * 純粹的快樂
* 相對的純粹 * 有或者無
* 思考上的透明
* 不夠透明? * 純化
* 封閉的影響
* 覆蓋效果
* 迴避影響 * 總結 - 第 6 章:值的不可變性 * 原始值的不可變性 * 從值到值
* 消除本地影響 * 重新賦值
* 意圖
* 凍結 * 性能 * 以不可變的眼光看待數據 * 總結 - 第 7 章: 閉包 vs 對象 * 達成共識 * 相像
* 狀態
* 行為,也是一樣!
* (不)可變
* 同構 * 同根異枝
* 結構可變性
* 私有
* 狀態拷貝
* 性能 * 總結 - 第 8 章:列表操作 * 非函數式編程列表處理 * 映射
* 映射 vs 遍歷
* 一個詞:函子 * 過濾器 * Reduce
* Map 也是 Reduce
* Filter 也是 Reduce * 高級列表操作 * 方法 vs 獨立 * 查尋列表 * 融合 * 列表之外 * 總結 - 第 9 章:遞歸 * 定義 * 為什麼選擇遞歸 * 聲明式遞歸 * 重構遞歸 * 總結
- 第 10 章:非同步的函數式 * 時間狀態 * 積極的 vs 惰性的 * 響應式函數式編程 * 總結
- 第 11 章:融會貫通 * 準備 * 股票信息 * 股票行情界面 * 總結
- 附錄 A: Transducing
- 首先,為什麼
- 如何,下一步
- 最後
- 總結
- 附錄 B: 謙虛的 Monad
- 類型
- 鬆散介面
- Maybe
- Humble
- Humility
- 總結
- 附錄 C: 函數式編程函數庫
- Ramda (0.23.0)
- Lodash/fp (4.17.4)
- Mori (0.3.2)
- 總結
關於出版
本書主要在 on Leanpub 平臺上以電子版本的形式進行出版。我也嘗試出售本書的紙質版本,但沒有確定的方案。
除了購買本書以外,如果你想要對本書作一些物質上的捐贈,請在 patreon 上進行操作。本書作者感謝你的慷慨解囊。
Contributions
非常歡迎對於本書的任何內容貢獻。但是在提交 PR 之前請務必認真閱讀 Contributions Guidelines。
License & Copyright
本書所有的材料和內容都歸屬 (c) 2016-2017 Kyle Simpson 所有。
本書根據Creative Commons Attribution-NonCommercial-NoDerivs 4.0 Unported License 進行授權許可.
P.S. 整理的好辛苦 %》——《%