iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 12
0

本章重點

  • 軟體工程的基礎是抽象,而最完美的抽象就是數學,而將數學概念轉化為程式設計,這就是 Functional Programming 。
  • Fantasy Land 是一份 JavaScript Common Algebraic Structures 的規格書,規定 FP 的 Type 該有的 Typeclass 。

抽象的力量

所有軟體工程的基礎建立在 AbstractDivide and Conquer ,從最古早的時代,focus 在處理很多 Register 、 Goto ,到現在是處理 Typeclass 、 Object ,這全是抽象化的概念。

那麼怎樣什麼是好的抽象化呢?
一個好的抽象化應該要 普遍存在、符合直覺 ,而人類研究了這件事已經上千年了,而這門學問正是 數學

試想,如何計算 8 + 6 + 4
我想改成計算 8 + (6 + 4) 會是個好點子,因為 6 + 4108 + 10 很明顯是 18 ,這麼做可以避開討人厭的進位,而且結果是正確的。

為什麼能夠確定 結果是正確的
因為 結合律 ,這在國小二年級學過,所以你不假思索就能確定結果是正確的。

試想,在程式中,什麼地方也有結合律?
Array.concat 有結合律, && 也有,甚至是 gcd 都有。

如果我們確定 map 也是數學上的某條規則,能夠把它們依照規則組合、解決更大的問題,而且他們不會出任何差錯,這是件很吸引人的事情對吧!

如果你追求什麼東西 可以學一遍,就能應用在任何地方 的話,那就是數學,就是 Functional Programming !

範疇論 Category Theory

範疇論是數學的一門學科,以抽象的方法來處理數學概念,將這些概念形式化成一組組的 物件態射

但數學研究的目的並不是為了解決程式設計的問題,像是 型別論 (Type Theory) 的發明是為了解決羅素悖論(你可能聽過,理髮師宣稱他要幫「不幫自己刮鬍子的人」刮鬍子,那他能不能幫自己鬍子)。

柯里-霍華德同構 (Curry–Howard isomorphism) 證明了,電腦科學與數學證明存在緊密關係,這成了 Functional Programming 的起源。

因此,在 FP 所定義的 Typeclass 名稱皆取自 Category Theory ,保留命名的嚴謹定義,以避免用詞不精確造成誤差

Fantasy Land

Fantasy Land 是一份 JavaScript Common Algebraic Structures 的規格書,當然這樣的規格不只一份,但其他版本大多大同小異。

如果所以 Type 都照個範疇學的規則走,那就會是個 夢幻世界 ,是 獨角獸們的棲息地

這是目前的 Github 上的族譜︰

每個 Typeclass 都代表一種數學的抽象概念,在規格書中定了該 Typeclass 需要 具有哪些方法,並且符合哪些規則 (Law) ,並不包含實作。換言之,只要符合規格,無論什麼語言、如何實作都可以。

在 Fantasy Land 所用的 Type Signature 與我們至今天使用的相似,而甚至部份的 Typeclass 就是生活中的常用觀念,接下來的文章會針對幾個常用 Typeclass 做解釋,這是 Functional Programming 最核心的一部分。

後記

參考資料


上一篇
Algebraic Data Types ,在 Functional Programming 定義資料結構
下一篇
Setoid 、 Ord
系列文
30天快樂學習 Functional Programming14

尚未有邦友留言

立即登入留言