呢條thread好有技術深度。
Mathk 發表於 2016-3-20 17:14


算吧啦,我連參戰都廢事。
口水戰language pros & cons真係好無謂...google一下就知道晒啦...

TOP

本帖最後由 hihihi123hk 於 2016-3-20 23:52 編輯

回覆 127# evec


   
容許我主觀啲咁講

如果一個人覺得 FP  只係 Pure function ( input => output ) 又或者用 Java way 去諗 FP

呢個層次嘅人根本無資格評論 imperative  vs Functional style

因為 FP 一樣有 Coding Pattern (Java 完全做唔到) 令到啲 Code 更加清楚易明、一樣有 Modeling 嘅手法

OOP 要學 Design Pattern ,你估 FP 唔洗學 Coding Pattern?

via HKEPC Ionic Reader v1.2.9 - iPhone

TOP

回覆  evec


   
容許我主觀啲咁講

如果一個人覺得 FP  只係 Pure function ( input => output ) 又或 ...
hihihi123hk 發表於 2016-3-20 22:28

願聞其詳……
我對FP既理解係pure function + composibility
(其實OOP都好著重composibility,當然自認為理解OOP既人遠比自認為理解FP既人少,於是令OOP變質)
至於FP coding pattern……Monad?
但呢類技巧好快會轉入type system既討論空間,而且最終都係要靠syntactic sugar先好用
同理,Currying、Laziness、Reactive等等我唔知可唔可以稱為「coding pattern」……

另外我覺得你唔可以一路話人地Java way,一路唔講點為之Java way
或者講完後,人地反駁,但你完全無視,繼續話人Java way
咁樣只係樹個稻草人黎打,無助討論

當然,最無助討論既,係企係高地上,擺出一副「你班傻仔繼續討論啦,朕已看透一切」既態度,乜都唔做

TOP

本帖最後由 pl8888 於 2016-3-21 00:58 編輯
最簡單 Java Default 嘅 List 、Map 只要你曾經 Pass 過入去某 Function, 你已經唔可以 Guarantee 出番黎嘅 Object 係同一個 Object。


Java 有 Collections.unmodifiableList, Collections.unmodifiableSet, Collections.unmodifiableList ... 只不過 Scala prefers immutable collection.

一個 Java Class 只要有一個 Setter 佢已經係 mutable


Setter 只不過係一個 convention, 有 setter 唔等於 mutable, 冇 setter 唔等於 immutable, 要睇個 class 既 contract 點 define.   

最多人最鐘意某就係 Assume 佢無變,然後 Runtime 先知 「啊 原來佢呢度郁咗我個 Object 」


如果依D coder 讀 OOP/programming course 一定肥佬.  做 coding 一定要睇 class/function contract, 唔會 assume 某D野. 如果咁懍野去寫 program, 個 program D問題一定一羅羅.

呢個肯定係寫過 Java 會遇到嘅「問題」。但唔覺得呢個問題只係因為 Working in Java way


每個 coder 都有自己覺得就手既 language.  有人鍾意 Scala,  有人鍾意 Java, 有人鍾意 PHP, 有人鍾意 Javascript, 唔使踩其他 language.  唔係 Working in xxx way, 而係要有 programming mindset, 冇既話用乜野 language 寫都死.

讀過 computer science (唔係個D所謂教寫 program 既 course) 既人, 就會知到寫 program 係易學難精既事, 好似作文一樣.

但唔同作文, 有陣時可以講下"創意", 唔使講邏輯 (即係老作), 但寫 program 唔講邏輯一定好大鑊, 所以都係個句, 要有 programming mindset, 唔係吹下水就得.

TOP

本帖最後由 evec 於 2016-3-21 01:28 編輯
無錯

Compile 變 JVM byte code 嗰時會做 Optimazation

其實一 Google 就會搵到,不過啲咁 Fund ...
hihihi123hk 發表於 2016-3-20 21:53



唔好就係識GOOGLE,自己驗證下實戰下,我早二年發神經用過JAVA運行係Android 的一個3D Game Engine,參透曬Java optimize,網上講的野未必可信,或者人地答的都係一個大方向,唔係抄抄吸吸就叫識,只是流於表面。
啦我即時拉翻我當年做咗的實驗出來,發現int switch 效能還可以,但一到用switch 來比較其他類型,即時慢曬落來,
仲有一般這類Loop測試,好看CPU cache,同真實情況可以有好大出入,都係個句,Google或者stack overflow 都係參考。

以下係OSX i5 運行
4 choose Int - Switch usage: 11376475
4 choose Int - If usage: 19004600
4 choose String - Switch usage: 56778864
4 choose String - If usage: 41141150
30 choose Int - Switch usage: 23425480
30 choose Int - If usage: 17945283
30 choose String - Switch usage: 46357161
30 choose String - If usage: 8178146

Intel CPU 還好,陽春的ARM Android CPU速度看看


本來想住Post個Code上來,但見水蛇咁長又無txt上傳就廢事。
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

TOP

願聞其詳……
我對FP既理解係pure function + composibility
(其實OOP都好著重composibility,當然自認為 ...
FlyingForever 發表於 2016-3-20 22:41


   
原諒我去緊旅行 星期三至返香港

講番正題

我對 Think in Java way 嘅定義就喺

一個人嘗試用 Java 做到嘅野去做 Basic context 然後再諗點做番同樣嘅野,根本無走出 Java 個框框。

同埋之前的確係講錯,我認為難 Main 嘅係 imperative style coding 唔係 OOP, OOP 我係 Scala 經常會用 , 所以將我之前寫嘅 OOP 字眼改為 Java 先至正確。返到香港會改番,以免造成混淆

事實上 Java 真係一個活生生嘅例子
imperative style + OOP

係到 Java 8 先有番啲改善

即係一啲人個腦海嘗試甚至妄想用 Java 去實踐 Functional style code, 點能夠同本身 Lang designed for Functional style 比較?Java 原生就無一啲幫助寫 Functional style code 嘅 syntax, Java 8 叫做好咗少少,多番 " Function as an object" 嘅概念,其實已經可以玩多好多野,但真係要實踐例如最簡單 Currying 要寫好多野,仲要唔係 Standard!

你舉嘅例子的確係其中一啲 Functional 嘅 Coding pattern   如果連呢啲基本嘅 Composition 嘅 Pattern 都未試過寫未試過用黎 Solve Problem,我認為無資格評論。

另外,不同 Use case 都可以有不同 pattern 去 Compose Function  提高 Readability,所以設計啲 Function 點樣 Compose 好緊要 。

最後都要講句,信不信由你。真係如你所言我真係唔想多加解釋,我之前講嘅都係我自身經驗,Functional 相比起 Imperative style 更加好 Main 更加易搵到問題所在 (要記住我嘅對比係如果喺Scala 寫番相同 Imperative style )。

學其他師兄話齋,討論緊話題都喺 Google 到嘅野,我無理由花時間同詳細逐樣講。


不過有興趣嘅可以自行 Google 睇多啲

How can you do anything useful without mutable state

Domain Driven Design

via HKEPC Ionic Reader v1.2.9 - iPhone

TOP

唔好就係識GOOGLE,自己驗證下實戰下,我早二年發神經用過JAVA運行係Android 的一個3D Game Engine,參 ...
evec 發表於 2016-3-21 01:21


   
我都唔知應該比咩反應你

因為根本無人會咁樣做 Benchmark ,JVM Run time 會有 Optimazation ,要 Warm up 行一轉先可以開始做 Benchmark

所以要做 Benchmark 一定係用 JMH,咁先有公信力

仲要你拎 Java 嘅 Switch 同 if 比較,之前個重點係 Scala 個 Pattern matching performance

via HKEPC Ionic Reader v1.2.9 - iPhone

TOP

Java 有 Collections.unmodifiableList, Collections.unmodifiableSet, Collections.unmodifiableList .. ...
pl8888 發表於 2016-3-21 00:57


   
非常同意


一 我知道有 unmodifiable collection 嘅存在,所以我都強調係 Java Default List、Map,亦都係最常用嘅

二 Java class 大部分情況,為咗易 Trace 啲 Field 邊度用過, 九成落 Private field 然後 getter setter,當然你話Object 內 其他 Function 都可以改 Value

三 的確!如你所言,呢個亦係 Imperative 最難 Main 嘅地方。
我最慘痛嘅經歷,我見一個 public SomeThing createSth( User u , XXX xxx) 。好啦,入面水蛇春咁長咁 Build 個 Something 出黎,見你有 Return, 嘩點知,佢唔小心 Call 咗 User.yyyy() 去就佢個 Builder , 成個 User 就咁被人郁咗,仲要係某啲 User 先出現呢個問題,要縮窄個範圍去到呢個 Function 先搵到呢啲 Bug

你可以話只不過係人為因素至有呢個問題,但我亦都可以話用Scala 就完全無呢個題

via HKEPC Ionic Reader v1.2.9 - iPhone

TOP

本帖最後由 evec 於 2016-3-21 02:37 編輯
原諒我去緊旅行  星期三至返香港

講番正題

我對 Think in Java way 嘅定義就喺

一個人嘗試 ...
hihihi123hk 發表於 2016-3-21 01:47



你夾硬話人THINKING IN JAVA,但你一直用一點唔係理由的理由夾硬話Scala好過Java,人地當然用Java的理論或者Java點樣實行一樣野的方法回覆你,如果你話Scala好過C++,我一樣用翻C++來回復,你話Scala好過Swift,我一樣用翻Swift講翻點樣做,PHP也是。
我亦可以回敬你 不要 "Thinking in Scala" ,但我講唔出口,因為你連Scala係咪野都唔知,同內地那些吹水程序員有得揮,他們吹水一流,寫碼就亂七八糟,都係個句,太多觀念問題很難再講,你再說多一百個專有名詞就更加突顯你基礎太過薄弱。
偏見的一直係你個邊,JAVA作為用咗廿年的流行企業軟件編程語言,如果如你所謂,亂七八糟不知郁咗咪野Object的問題,神早就不可能有這個位置,引申到電腦科技如此不確定,神早全球電腦大亂鬥。

我都唔知應該比咩反應你  

因為根本無人會咁樣做 Benchmark ,JVM Run time 會有 Optimazation ,要 Warm up 行一轉先可以開始做 Benchmark

所以要做 Benchmark 一定係用 JMH,咁先有公信力

仲要你拎 Java 嘅 Switch 同 if 比較,之前個重點係 Scala 個 Pattern matching performance

曬氣,一句無人咁做Benchmark,你都係先Search下你認為萬能的Google先,
Warmup 一陣先可以行Benchmark Search Google來證明來看下有無人咁做
你看翻你回覆好似發現新大陸的文字講緊係咪野先好唔好
switch case在bytecode有機會調用到tableswitch
worst case都係lookupswitch 等同if-else



最後你如果想再講你想討論的問題可以另開POST,我再入去打過,但唔好再打劫D個POST了,太過離題了。

TOP

呢個POST好好睇 學到野

TOP