點解要寫FP?

將咁既野

btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //do something
            }
        });

變成咁

btn.setOnClickListener((v)->//do something);


好處就只有打少D
但打少D真係咁重要?
寫code唔係應該寫到連comment都唔洗睇, 就明佢做緊乜嗎?
上面個版本, 一睇就知set入去果舊野係用黎listen onclick, 動作就係onClick果時做

如果寫下面個版本, 你唔會知道掉左D乜野入去, 然埋果舊野幾時會做野

當然, 似依個例子黎講, 睇setOnClickListener依個名就可以知道以上兩樣野
但有時, 如果遇到一D唔係咁明顯既, 你就要去睇返api先知做緊乜野

而且, 當一個class有兩個method要implement的話, 又要用返傳統方法
結果成份code, 寫法就變得唔統一

本帖最後由 梁炳 於 2017-3-31 20:11 編輯

唔肯定你呢種係咪可以叫FP (至少有少少FP的成分)
精髓就在於Function as first-class citizen
第一個寫法係runtime new左個anonymous object出來,而入面有個method係你想call的,語意上係間接左一層
現今programming好多情況都只係要一個簡單callback funciton, Java舊有方式真係幾麻煩

TOP

將咁既野

btn.setOnClickListener(new View.OnClickListener() {
            @Override
            publ ...
3ldk 發表於 2017-3-31 17:24


Java係好多listener入面有N個不同function, 果D的確唔多適合下面個版本
但係JS的話, 好多時就係每一個event set一個callback function, 而唔係listener
而家只係將JS既野抄去Java

TOP

唔肯定你呢種係咪可以叫FP (至少有少少FP的成分)
精髓就在於Function as first-class citizen
第一個寫法係 ...
梁炳 發表於 2017-3-31 20:10


其實唔係好對題
因為問緊: 雖然寫少左野, 但犧牲左易讀, 即係難main左, 咁值得嗎? 如果以工程角度黎睇, 應該就唔值
但答案就話: 因為舊寫法麻煩, 新野法可以寫少幾行code
咁即係又去返原本條問題, 雖然寫少左幾行, 但...


Java係好多listener入面有N個不同function, 果D的確唔多適合下面個版本
但係JS的話, 好多時就係每一個eve ...
KinChungE 發表於 2017-3-31 21:03


以一個application的角度, 常見的功能, 來來去去都係果幾個做法
所以callback通常都係果幾種
例如sendrequest, 起碼就會有onresponse, onerror
如果係onclick, 就通常只有onclick一個callback

無論java定js, 實作方式都係差不多, 所以唔會話java就多d multiple callback, js就多d single callback
理論上應該係大家差不多
而且Lambda Expression亦唔係js既野, 無論邊個language都有, 所以無話邊個抄邊個

TOP

其實唔係好對題
因為問緊: 雖然寫少左野, 但犧牲左易讀, 即係難main左, 咁值得嗎? 如果以工程角度黎睇,  ...
3ldk 發表於 2017-3-31 21:48


我指既係JS callback係function (類似C++ Function Pointer)
而Java係Listener/Handler Object
新既寫法係令冇function pointer既language變得比較接近有咁樣
另外, 如果上面呢D咁寫少左野, 唔覺得會難main左
因為見到setOnClickListener都已經知入面param係乜, 一定唔會ambigious
最多只係唔習慣咁解

TOP

我覺得主要係熟唔熟syntax同個pattern
如果熟左,lambda expression寫法一睇就見到個 View v 要做乜
而且 onClick 內的statement可以接住 -> 寫出來,睇得比較流暢

反而anonymous class寫法又 @override 又 public void
new OnClickListener 同 setOnClickListener 亦好重複
可能 onClick 內只得句 v.setText(""); 結果寫多咁多行

TOP

我諗唔係習唔習慣/熟唔熟個syntax問題
一個咁簡單既syntax, 其實知道左點解, 就無再分唔習慣/唔熟

或者我再強調依兩句
"當然, 似依個例子黎講, 睇setOnClickListener依個名就可以知道以上兩樣野
但有時, 如果遇到一D唔係咁明顯既, 你就要去睇返api先知做緊乜野"

講緊既, 當然唔係setOnClickListener依D咁common既api
甚至係講緊一D 3rd library
試諗下, 如果睇人地D code, 見到一個未見過的api
如果畫面上有多D資料, 起碼有機會齋睇code就知入面做緊乜, 可以減少睇document的機率

所以唔係唔熟syntax, 而係唔熟api
但試問, 除左好common既api, 有幾多人可以熟晒所有api?

TOP

本帖最後由 KinChungE 於 2017-3-31 23:15 編輯
我諗唔係習唔習慣/熟唔熟個syntax問題
一個咁簡單既syntax, 其實知道左點解, 就無再分唔習慣/唔熟

或者我 ...
3ldk 發表於 2017-3-31 22:29


好既IDE, mouse cursor一指埋去就睇到係乜
有乜咁難?
唔關點解關熟唔熟事

要減少睇document就應該靠javadoc
一般IDE autocomplete function時都會show埋相關javadoc出黎
完全唔明點解多句new會清楚左, 明明set"OnClick"Listener入面又係"onClick"(v), 字眼完全重疊

TOP

如果要所謂callback hell,或者promise/fetch api,用上面個方法係咪好吃力?

TOP

本帖最後由 mingming123 於 2017-4-1 18:15 編輯

題外話, 聽講FP寫multi threading好d,  咁係唔係用amd u會有利d?

via HKEPC Reader for Android

TOP