sealed class Event
data class BroadCastEvent(
val payload: Payload
): Event()
data class OneToOneEvent(
val destination: Destination,
val payload: Payload,
val secret:Boolean = false
): Event()
然後在 messenger.send 這個 function 做 pattern matching
這樣就只有在 OneToOne 的時候才能使用 secret 選項,不會寫錯
我們使用 scala 開發 android app 已經過了半年,就單純 code 要我回去寫 java 我只會皺眉頭。
說真的其實可以只把 scala 當作語法調整過的 java,一樣可以不走 FP ,全部都使用 OO paradigm。也聽過一些純 FP 擁護者認為 scala 根本不能算 FP 語言,因為 scala 並沒有防止你寫 OO 之類之類。
就以這個觀點來說,scala 跟其他非 java 語言比起來根本沒有有所謂的較高的門檻。
回到 Rx
跟 promise 的 then 一樣,其實要用 Rx 只需要會 flatMap 跟 map 這兩個 function 就可以做到你所有想要做的事情,剩下的都是 helper method 而已。甚至,有些人根本只把 rx 當 event bus 用而已。
我覺得大家認為 Rx 的高門檻其實是建立在:大部份的工程師是從 imperative paradigm 開始學習 programming,所以要過渡到 declarative programming 會有很大的陣痛期,不過就這點來說 ReactJS 的社群接受度倒是很高,所以除去舊有思維的因素,我並不認爲 Rx 是一個高門檻技術。
我反而認為如果一個專案要跑五年以上,導入 Rx 絕對不會錯,FRP 的觀念下,state 被縮現在做小範圍,寫得好的話,所有 function 都可以沒有 side effect,這樣的架構是最好測試最好維護的。
倒是想請問你說「scala 被黑是因為開發者圈用實作的方式給了答案」,是怎麼樣的狀況?