iT邦幫忙

2018 iT 邦幫忙鐵人賽
0
自我挑戰組

Good Morning, JS functional Programing.系列 第 31

Good Morning, Functional JS (Day 30)

標題 Good Morning,其實是希望本系列能為 Functional Programming 學習雲霧中透進一絲微光

Flaming Deku Stick by Tatiana Bischak

會寫本系列文章,主要是因為想要學習 Functional Programming,也想對 JS 有更深入的了解,內容以探討 Kyle Simpson. Functional-Light JavaScript 一書內容為主軸,

算是邊讀邊翻譯,也算給自己做筆記,但並不是逐字翻譯,而是以原文的概念加上我自己的理解,難免會與原文失真,下方我有留資訊歡迎討論。

以下是我參考的資訊,供有興趣讀者也參考:

1. Frisby Mostly Adequate Guide to Functional Programming

中譯本:JS 函数式编程指南

以生動的舉例解說各種 FP 概念,不過內文舉例非原生 JS ,有使用函式庫。

2. 阮一峰 函数式编程入门教程

深入淺出談 Functional Programing 搭配範例。

3. Functional Programing 名詞大全

快速查詢專有名詞的定義與簡單範例
Functional Programming Jargon

4. Functional Programing 相關函式庫

文章目錄以及參考資源

熱身前導文

帶大家看影片認識 Kyle Simpson,以及正確的學習心態

參考影片:
Office Hours with Kyle Simpson, Author of "You Don't Know JavaScript" Book Series
Yes

第一部分 Why

對應原文第一章,學習 FP 的理由,也提到正確的學習心態

其中作者也列出參考資源,點擊查看

第二部分 Function

對應原文第二章,說明function 在 Functional Programming 的定義,以及須滿足的條件,

第三部分 參數

對應原文第三章,調整參數,使函數能互相組合

收集(gather) 和 展開(spread)操作

Partial Application

Currying

參數順序處理

Point-free 無參數風格

參考資料:

第四部分 函數組合

對應原文第四章,實際使用第三部分的技巧進行函數組合,並使用函式庫 Ramda

第五部分 副作用

對應原文第五章,研究副作用、純函數的特性與好處,並且我們在減少副作用上下了很多功夫,

第六部分 Immutability

對應原文第六章,在 JS 中實現數據不可變性,有兩個方法: Array.slice()、Object.freeze()。但是這兩種方法都是 shallow 處理,又有存在性能的問題,這部分藉由 使用 Immutable.js 來實現。

推薦教學,了解 Immutable.js:
Yes

第七部分 遞迴

對應原文第八章,遞迴之所以在 FP 中討論,是因為迭代方式常會需要中間值,這就是副作用,所以在流行的函數庫中都沒有迭代方法,這就是遞迴重要的原因之一

處理 stack overflow 技巧

額外參考資料:

番外篇

functor 函子

連載最後也是最重要的概念 - functor

額外參考資料:

Higher-order function

說明何謂 Higher-order function,以及特性

推薦教學,深入了解如何應用:
Yes

ES6 Class

因為接觸 Angular ,想了解一下 Class,於是有了這篇

Not the end, to be continued

連載到了今天,鐵人完賽,每天花了相當多時間翻資料、整理心得,幾度想放棄,好在跟 好想工作室 一起團報連載、一起討論,總算是完成挑戰了!

12/20 開始連續 30 天的 commit

但學習不會因此停止,如果有引起你的興趣也請點頁面上方連結,閱讀原作。So far,我們的 FP 工具箱裡的工具還不全,在未來,如果有新的研究心得,我仍會寫成文章分享。

有任何問題、技術交流、以下是連絡資訊

關於我

李柏毅 LeeBoy

前端工程師


上一篇
Good Morning, Functional JS (Day 29, functor 函子)
系列文
Good Morning, JS functional Programing.31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Blackie Tsai
iT邦新手 5 級 ‧ 2018-01-20 18:13:12

整個系列寫得很用心!感謝分享

LeeBoy iT邦新手 4 級 ‧ 2018-01-21 22:19:11 檢舉

謝謝,大大的 AWS 雲端世界也讓我受益良多

我要留言

立即登入留言