iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 16
0
自我挑戰組

Julia語言—從入門到專案系列 第 16

[Day 16] Reactive programming--API設計

目前我們已經完成一小部分的程式

那如果我們想要把他包裝成比較方便使用的介面呢?

設計API

由於Julia偏好他自己方式的物件導向寫法,比較不是用傳統的物件導向寫法,像是

# 傳統寫法
seq([1,2,3]).map(f1).filter(f2)

# Julia偏好寫法
filter(f2, map(f1, [1,2,3]))

Julia的寫法比較偏向functional language的寫法,那這時候怎麼辦呢?

其實我想這個問題也想很久了。

傳統物件導向寫法

傳統物件導向寫法不是不能用,但是這樣會走回到傳統物件導向的窠臼裏面。

像是外掛式的多型就沒辦法使用,每個method都要宣告在type裏面,這樣會導致裏面一大包,很難閱讀跟修改。
一旦不只有mapfilter了,如果擴充到40, 50種運算的話就很可觀了。

Julia偏好寫法

functional的寫法會失去原本reactive programming的可讀性,他會使得function嵌套在一起,很難分辨出到底誰先誰後,當串接的function愈多就愈難看。

function-like object

之前在寫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

下一篇實作這個!


上一篇
[Day 15] Reactive programming--組合起來!
下一篇
[Day 21] Simulated annealing -- 演算法
系列文
Julia語言—從入門到專案31

尚未有邦友留言

立即登入留言