函式式程式設計思維
函式式程式設計特性
1 資料不可變性(immutable data)多有的變數只可以賦值一次,變數不可變,如果想改變變數就建立乙個新的變數。
2 函式是第一公民(first class method)函式可以像普通變數一樣去使用。函式可以像變數一樣被建立,修改,並當成變數一樣傳遞,返回或是在函式中巢狀函式。
3 引用透明(referential transparency) 指的是函式的執行不依賴於外部變數或「狀態」,只依賴於輸入的引數,任何時候只要引數相同,呼叫函式所得到的返回值總是相同的。天然適應併發程式設計,因為呼叫函式的結果具有一致性,所以根本不需要加鎖,也就不存在死鎖的問題。
4 尾遞迴化(tail call optimization)因為函式呼叫要壓棧儲存現場,遞迴層次過深的話,壓棧過多會產生效能問題。所以引入尾遞迴優化,每次遞迴時都會重用棧,提公升效能。
函式式程式設計技術(方**)
1 對映化簡(map & reduce)函式式程式設計最常見的技術就是對乙個集合做map和reduce操作。這比起過程式的語言來說,在**上要更容易閱讀。傳統過程式的語言需要使用for/while迴圈,然後在各種變數中把資料倒過來倒過去的
2 管道 (pipeline)把一組函式放到乙個陣列或是列表中,然後把資料傳給這個列表,資料就像乙個pipeline一樣順序地被各個函式所操作,最終得到我們想要的結果。他的設哲學就是讓每個功能就做一件事,並把這件事做到極致,軟體或程式的拼裝會變得更為簡單和直觀。
3 遞迴 (recursing)遞迴最大的好處就簡化**,他可以把乙個複雜的問題用很簡單的**描述出來。遞迴的精髓是描述問題,而這正是函式式程式設計的精髓。
4 柯里化 (currying)把乙個函式的多個引數分解成多個函式, 然後把函式多層封裝起來,每層函式都返回乙個函式去接收下乙個引數。
5 高階函式(higher order function)函式當引數,把傳入的函式做乙個封裝,然後返回這個封裝函式。現象上就是函式傳進傳出
什麼是函式式程式設計思維?
我為什麼要把我的知乎回答搬到這裡呢 大概是太久沒發東西了來湊數吧。函式式程式設計與命令式程式設計最大的不同其實在於 函式式程式設計關心資料的對映,命令式程式設計關心解決問題的步驟 這裡的對映就是數學上 函式 的概念 一種東西和另一種東西之間的對應關係。這也是為什麼 函式式程式設計 叫做 函式式程式設...
函式式程式語言python 函式式程式設計
函式是python內建支援的一種封裝,我們通過把大段 拆成函式,通過一層一層的函式呼叫,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函式就是面向過程的程式設計的基本單元。而函式式程式設計 請注意多了乙個 式 字 functional programming,雖然也可以歸結...
僵固式思維 OR 成長式思維
有意無意中,看到這樣的一篇文章,覺得非常富有正能量,而且也比較有同感。而且,不僅僅對於職場暫時失落或者失意的人有幫助,就是對學生,也一樣的。故特分享,以共勉之。我想每個新人進入職場之後都會遇到的第乙個問題是發現自己什麼都做不好。這個時候是很挫敗的,因為會發現自己連郵件也不會寫 也不會打。從學校帶出來...