隨手寫寫Functional programming (函數式編程)
簡述:Functional programming 通常要注意以下特性,並建議在學習上套用數學而非程式下
關鍵字:#functional_programming #Pure_function #First_class #High-order_function #Currying#Closure
一. Pure function (純函數)
Pure function 只談兩件事情1. 每次,同一筆輸入得到相同的輸出
2. 不會產生 side effect(副效應)
這意味著函數將會是 stateless 的,不會去干擾外面的世界,而且隨時可以複製貼上與移除
ex:
在工廠裡面的作業員,每個人都是獨立的,隨時都是可以補
這種思維下用人的公司,裡面員工只是員工,不是夥伴。
二. First-class (Function/......)
這個其實很容易的,簡單來說,就是 functnio 在底層的身份地位與變數相等,也就是說 Double, Int, Function 是相等地位,彼此的位置可以調動。在底層來看,原本 heap 純放變數位置的地方也可以放入 function。這個概念一定要建立起來,後面的三個特性才會順。
三. High-order Function
High-order function 表輸入值後,可以得到一個函數或是普通輸出,就如同數學定義 f(x) = x +1, g(x) = x * x, f(g(x))且 x = 2 時,輸出等於多少?下一次 x = 2 時,結果是否與這次相同?
四. Partial function => Currying
談 Currying 前先說說 Partial function,因為兩者概念上很接近,但又不是相同舉例來說:定義 def add(x, y) = x + y
Partial function 中
result = partial(add, 5)
result = result(7)
Currying 中為
result = Curry(add)
result_2 = result(5)
result_3 = result_2(7)
這邊有實際的案例可以了解
https://stackoverflow.com/
五. Closure/memorize/Lazy
Closure 表函數的變數只存在於創造時的環境裡(scope)。比較像是我創造新的國罵,然後國罵只存在我的世界,只要
留言
張貼留言