目前我們已經完成一小部分的程式
那如果我們想要把他包裝成比較方便使用的介面呢?
由於Julia偏好他自己方式的物件導向寫法,比較不是用傳統的物件導向寫法,像是
# 傳統寫法
seq([1,2,3]).map(f1).filter(f2)
# Julia偏好寫法
filter(f2, map(f1, [1,2,3]))
Julia的寫法比較偏向functional language的寫法,那這時候怎麼辦呢?
其實我想這個問題也想很久了。
傳統物件導向寫法不是不能用,但是這樣會走回到傳統物件導向的窠臼裏面。
像是外掛式的多型就沒辦法使用,每個method都要宣告在type裏面,這樣會導致裏面一大包,很難閱讀跟修改。
一旦不只有map
、filter
了,如果擴充到40, 50種運算的話就很可觀了。
functional的寫法會失去原本reactive programming的可讀性,他會使得function嵌套在一起,很難分辨出到底誰先誰後,當串接的function愈多就愈難看。
之前在寫functional design pattern的時候注意到這個東西,我想或許可以用。
他長的像這樣
immutable Polynomial{R} # 一個多項式的型別,裏面儲存著各項的係數
coeffs::Vector{R}
end
function (p::Polynomial)(x) # 為多項式定義行為,冪次遞減
return reduce((x1, x2) -> x1*x + x2, p.coeffs)
end
使用
p = Polynomial([1, 2, 3]) # 給定多項式
p(5) # 代入值
回傳38
下一篇實作這個!