函數式編程之後

更新於 發佈於 閱讀時間約 3 分鐘

這個系列的文章主要專注於物件導向到函數式編程的差異與分析,並針對概念與機制上的不同進行比較。很多人說物件導向和函數式編程沒有哪個比較好的問題,只有哪個比較適合的問題,然而我並不這麼認為,我透過這一系列的文章從各個角度討論它們之間的優缺點就是為了闡述我的觀點。物件導向錯在沒有理論基礎,但它贏在熟悉性,人們認為它比較好只是因為我們害怕學習新知識,只是因為我們不去思考背後的道理。函數式編程需要的前置條件對於大部分程式設計師太過苛刻,而且它的編程風格與設計理念跟物件導向有所差距,這使得我們需要換個腦袋才有辦法改用函數式編程寫程式。學習函數式編程需要的是對於程式的基礎概念的重新思考,透過重新檢視習以為常的事物才能發現其中的問題。


函數式編程還有很多部分可以討論,但它以超出物件導向所能觸及的範圍,未來有機會再討論。在此僅提幾個關鍵字以便有興趣的讀者搜尋。跟函子有關的概念:functor, applicative, monad, alternative,其中monad是很重要的概念,基礎的monad包括maybe/either, list, rws, io等,而函式庫parsec是一個很有名的應用。另外續體continuation被稱為monad之母,它與continuous passing style有一點關係,ocaml的effect handler就是基於續體實現的。monad的組合在Haskell是使用monad transformer,它顯示了monad本身難以組合的問題,因此才有effect handler的出現。另一種實現有副作用的操作的方法是arrow。我對於monad有自己的看法,未來有機會再討論。monad的相反是comonad,我並沒有很了解這個概念,reactivity似乎跟它有關。跟list有關的操作包含foldable, traversable,其中常與代數結構monoid, heyting algebra等一起使用。lens可以用來存取特定欄位的資料,而zipper則可以重新定向資料結構的根。另外一種方法是differentiation,它把微分的概念帶到代數資料結構上,用來描述帶有洞的資料結構。


lambda calculus是必學的概念,還有一個更特殊好用的是interaction calculus。Church encoding和Scott encoding等展示了lambda calculus的強大。Haskell跟其他純函數式的程式語言不一樣的地方是laziness,這使得它的思考方式很不一樣。但它並沒有特別在乎totality,因此必須小心一些陷阱。相對地,idris2注中totality,甚至要求我們提供證明,這是使用dependent type達成的技術。Haskell可以透過擴展使用higher rank type,這可以做到一些特殊的操作。react的diff算法也是基於純函數式的特性。我最近在研究graph edit script相關的方法,函數式的做法非常有趣。還有type level programming, tagged union, template and tactic metaprogramming, functional dependency, type family, attributes等概念,族繁不及備載。大部分內容都可以在https://en.m.wikibooks.org/wiki/Haskell找到。

留言
avatar-img
留言分享你的想法!
avatar-img
have bear的沙龍
4會員
28內容數
這不是教你如何從物件導向到函數式編程的入門教程。我會深入探討物件導向與函數式編程的差異,並討論為什麼你應該使用函數式編程並徹底放棄物件導向。
have bear的沙龍的其他內容
2024/02/08
前一篇文章中所提的函數式的三個機制明確說明了它關注的規則與能力具體是什麼。然而這套對於函數式編程的定義主要基於特定的類型系統,作為一個編程範式來說過於狹隘(物件導向的定義也是這樣)。更廣義的,我認為函數式編程主要依循三個原則,它們可以應用於任何程式語言,就算沒有靜態類型系統的支援也可以。例如在不管類
2024/02/08
前一篇文章中所提的函數式的三個機制明確說明了它關注的規則與能力具體是什麼。然而這套對於函數式編程的定義主要基於特定的類型系統,作為一個編程範式來說過於狹隘(物件導向的定義也是這樣)。更廣義的,我認為函數式編程主要依循三個原則,它們可以應用於任何程式語言,就算沒有靜態類型系統的支援也可以。例如在不管類
2024/02/04
前面談了那麽多函數式編程與物件導向的差異,但我們還沒定義函數式編程。就像物件導向,函數式編程沒有明確的定義,每個人對於什麼是函數式編程都有不同的看法。在這裡我會總結前面的討論,給出我對於函數式編程的觀點。 物件導向注重封裝與延展性,因此一般基於三個機制:繼承、多型、封裝,它們代表了物件導向所重
2024/02/04
前面談了那麽多函數式編程與物件導向的差異,但我們還沒定義函數式編程。就像物件導向,函數式編程沒有明確的定義,每個人對於什麼是函數式編程都有不同的看法。在這裡我會總結前面的討論,給出我對於函數式編程的觀點。 物件導向注重封裝與延展性,因此一般基於三個機制:繼承、多型、封裝,它們代表了物件導向所重
2024/02/02
說到物件導向就必須提五個原則,統稱SOLID,它被認為是物件導向的重要概念。這五個原則並不只適用於物件導向,事實上它很像函數式編程的習慣。它的命名很奇怪且容易讓人混淆,所以我會用我自己的翻譯解釋。 Single Responsibility Principle 是「單一職責原則」,認為一個模組
2024/02/02
說到物件導向就必須提五個原則,統稱SOLID,它被認為是物件導向的重要概念。這五個原則並不只適用於物件導向,事實上它很像函數式編程的習慣。它的命名很奇怪且容易讓人混淆,所以我會用我自己的翻譯解釋。 Single Responsibility Principle 是「單一職責原則」,認為一個模組
看更多
你可能也想看
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
高中數學主題練習—三次多項式函數化標準式
Thumbnail
高中數學主題練習—三次多項式函數化標準式
Thumbnail
高中數學主題練習—三次多項式函數化標準式
Thumbnail
高中數學主題練習—三次多項式函數化標準式
Thumbnail
高中數學主題練習—三次多項式函數化標準式
Thumbnail
高中數學主題練習—三次多項式函數化標準式
Thumbnail
在遠方的愛作詞韓俊碩作編曲AI這首歌很感傷講述一位男人無法接受自己的另一半離世 在遠方的愛 by @soulsearchingminuet147 | Suno
Thumbnail
在遠方的愛作詞韓俊碩作編曲AI這首歌很感傷講述一位男人無法接受自己的另一半離世 在遠方的愛 by @soulsearchingminuet147 | Suno
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
1.0 從函數到函算語法 1.4 函算語法 1.4.1 語法範疇理論導論 1.4.2 函算語法與函數概念 二 關於函數的演變和弗雷格對函數的看法,前面的 1.2 節和 1.3 節已經談論了不少。 由於函數在數學﹑邏輯學﹑計算語言學極為重要,更且是本書闡述的語法的中心概念,因此有必要再略作
Thumbnail
1.0 從函數到函算語法 1.4 函算語法 1.4.1 語法範疇理論導論 1.4.2 函算語法與函數概念 二 關於函數的演變和弗雷格對函數的看法,前面的 1.2 節和 1.3 節已經談論了不少。 由於函數在數學﹑邏輯學﹑計算語言學極為重要,更且是本書闡述的語法的中心概念,因此有必要再略作
Thumbnail
1.0 從函數到函算語法 1.2 函數概念小史 1.2.1 中譯的來源 1.2.2 一個速度問題 1.2.3 幾何的方法 1.2.4 微積分的記法 1.2.5弦的振動  七 雖然論爭沒有得出任何定論,但對函數概念的演化卻影嚮頗深。 在這次歷時多年的論爭中,函數概念得以擴大而包括
Thumbnail
1.0 從函數到函算語法 1.2 函數概念小史 1.2.1 中譯的來源 1.2.2 一個速度問題 1.2.3 幾何的方法 1.2.4 微積分的記法 1.2.5弦的振動  七 雖然論爭沒有得出任何定論,但對函數概念的演化卻影嚮頗深。 在這次歷時多年的論爭中,函數概念得以擴大而包括
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News