IngramChen 積分 0

啊… 我的論文是用 Fortran77 寫的…

IngramChen 積分 1

那整個 app 要用 xamarin 重寫, 而且不能用現有所有 anroid 資源 (lib, 人力...etc). xamarin 的 commitment 也是有待考慮.

IngramChen 積分 5

是說我也跑一次 tutorial 了,kotlin 的確有些地方讓我這 Java 開發者非常的心動。 (例如 builder, data class)

但是沒支援 Java8/Stream 讓人沮喪。然後和 Spring 合用時問題一堆1 。看大家這麼推我還以為所有 Java library/framework 都能無縫接軌咧… 原來扯到 CGLib 這類的東西 kotlin 還是很無力,但偏偏用 CGLib 的 framework 很多啊。kotlin 在這點還待時間的驗證。

另外最讓我意外的是:

fun main(args: Array<String>) {
  arrayOf(1, 2, 3).forEach {
    print(it);
    return;
  }
}

closure 裡的 return 會直接跳出 block,所以只會印出 1。先不論這是好是壞,但這跟其他程式的行為差的有點多,移植 Java 程式時這會有一堆 bug 啊。這不該是一個講求最高 Java 合作的語言該做的選擇。

至於 Android 面,我正在等 async/await 的功能,因為這才會是真正殺手功能。Android 的程式寫起來很繁雜,但靠著 retrolambda 和 butterknife 還算過的去。但 async/await 帶來的優點就不是任何 Java library 可以做到的。

總而言之,現階段我還是選擇先等一下,等 kotlin 1.1,等 spring 支援的更好,等 async/await。

IngramChen 積分 1

不同討論區允許重覆 (通常這叫轉貼, cross-post)

IngramChen 積分 1

jackson 也只比 binary 流慢 2 到 3 倍而已. 從跨平台性和 debug 容易度來看的話, 還是首選 (web 上用 protobuf 很煩...)

IngramChen 積分 0

看結果 java protobuf 是對小 payload 最佳化, 大的 payload 就弱一點

mikeliu 積分 0

這套cache library看起來效能驚人阿

haocheng 積分 1

我現在的確比較關心 Spring boot 什麼時候出新版..

IngramChen 積分 0

我猜過不久 springframework 和 boot 的發行和版號會同步

popcorny 積分 2 編輯於

天啊!! 這東西好複雜,看了好久才知道他在說什麼。

一般來說store.dispatch應該只吃Action1 type,但是透過middleware可以包裝此dispatch變成可以吃Thunk這個型態,此型態的定義在 這裡2 ,簡單講就是一個

function(dispatch, getState)

這種型態的function。透過closure的方式,可以讓在async的地方去call這兩個redux會用到的function,來達到ajax complete的時候,去sync的呼叫dispatch來通知complete。

這個可能對於用redux的人可能會知其然但不知所以然吧,如果沒有搞懂thunk的機制,可能覺得莫名其妙吧。我同意你說的,這些abstraction不太必要,只是讓一且覺得很神奇而已,對於新手入門門檻太高了。

siuying 積分 2

Redux 在文件 Async Actions1 中有說到,這時候通常用 redux trunk middleware 寫一種叫 Action Creator 的東西。儲存理應放在 Store 。

不喜歡 Redux 的地方就是這種造一大堆新的 abstraction 出來,而且也不是唯一的做法,新手不知道對不對。

popcorny 積分 2 編輯於

side effect就是改變外面的狀態就是side effect,例如counter++就是side effect。所以以下的increase function就是有side-effect

var myObject = {
    counter: 0,
    increase: function() {
        this.counter++;
    }
}

因為他改變了counter的值了。而no side-effect的版本是

function addOne(counter)  {
    return counter + 1;
}
而redux做的事情是
state = reducer(state);

所以這個assignment是做redux裡面,而非reducer。

事實上在functional language中,assignment is evil XD。所以他們才那麼不同意Imperative programming style。

IngramChen 積分 0

side effect 是指 ajax call 或是 persist 到 local storage 之類的。 ajax code 是放在 action,persist 大概放 store 吧 ? 。

剩下可以 pure 處理的才可放在 reducer (大概是 model 之類的吧?)

不知有沒理解錯

popcorny 積分 0 編輯於

action感覺比較像是input的包裝,應該沒有邏輯層面。真正邏輯是做在reducer。

所謂的no side-effect,也可以說不會改變外部的狀態。所以在redux中,mutation是交給redux內部去做。而redux會把目前狀態跟action交給reducer,最後再redux內部去改變store的狀態。所以side-effect(mutation)應該說發生在redux內部。

IngramChen 積分 0 編輯於

ok, 所以 side effect 拆到 action 去了。感覺是將傳統的 controller 的角色再細分成 action, reduce, flow ...etc

popcorny 積分 2 編輯於

一個page出來的時候應該有initial state,不管是page init state還是server side render的init state。

而每個event都可以改變狀態。例如click event, input event, 甚至ajax complete的event,都可以當做一個讓狀態改變的action。但是reducer只專注於input跟中間的參數,跟應該有的output。

以ajax read more的例子來說。先是ajax request到server,complete的時候增加一個append的action去reduce舊狀態(只有第一頁)到新狀態(增加ajax load的新文章),再呼叫react去render。

所以還是可以保持render跟reduce都是pure的。

IngramChen 積分 1

那 side effect 放哪?redux 是 pure ,virtualdom 也是 pure...