本帖最後由 evec 於 2016-3-20 04:53 編輯
層次高低不在於爭論與否,而在於爭論既內容
用邊種language本身冇咩所謂,睇task
但我覺得爭論language fe ...
FlyingForever 發表於 2016-3-19 22:47



    C++ 係C 的擴展版,使之更加符合現代複雜軟件設計。
    JAVA和SCALA好比使用相同JVM的另外一種語言(SCALA己能用到.NET,簡單講SCALA是借JAVA平台抽更多支持者,和JAVA沒大關係)。
    SCALA表面上因為JAVA不太靈活,覺得限制太大,事實上是野心家,想一統江湖,建構全通用語言。

TOP

本帖最後由 hihihi123hk 於 2016-3-20 09:44 編輯
你第一句就錯曬,好好看下甚麼是OOP才說吧,仲話JAVA阻唔到人地改OBJECT,學下點寫JAVA先講好唔好:titter ...
evec 發表於 2016-3-20 04:04


   
你都學下寫 Java 至講啦

最簡單 Java Default 嘅 List 、Map 只要你曾經 Pass 過入去某 Function, 你已經唔可以 Guarantee 出番黎嘅 Object 係同一個 Object。

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

最多人最鐘意某就係 Assume 佢無變,然後 Runtime 先知

「啊 原來佢呢度郁咗我個 Object 」

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




via HKEPC Ionic Reader v1.2.9 - iPhone

TOP

回覆 98# evec


    如果係c,係無bool

TOP

你都學下寫 Java 至講啦

最簡單 Java Default 嘅 List 、Map 只要你曾經 Pass 過入去某 Fu ...
hihihi123hk 發表於 2016-3-20 09:20



    唔太明白咩叫同一個 Object, 指的係同一個 reference, 定入面的 state 一樣?

TOP

唔太明白咩叫同一個 Object, 指的係同一個 reference, 定入面的 state 一樣? ...
snoopy11hk 發表於 2016-3-20 14:31

佢想講既係
  1. final ArrayList<Integer> list = new ArrayList<>(...);
  2. doSomething(list);
  3. doAnother(list); // 有bug,因為list既內容比doSomething改左,而你冇注意到
複製代碼
Immutable既話就會係:
  1. final ImmutableList<Integer> list = new ImmutableList<>(...);
  2. doSomething(list);
  3. doAnother(list); // 保證list內容冇變到
  4. // 如果要改要咁樣:
  5. final ImmutableList<Integer> modifiedList = doSomething(list);
複製代碼
但我覺得呢個只係style問題,同OOP無關
呢個唔係language既問題,而係library既問題,上面既code已經顯示Java有能力做immutable data structures
Java亦肯定有人寫immutable list
(已經有人將Scala / Clojure既Collections port返去Java)
而話說回來,Scala亦支援mutable variables / objects,因為係某D情況下會快好多
所以你只可以話「Scala偏向immutable,Java偏向mutable」

TOP

佢想講既係Immutable既話就會係:但我覺得呢個只係style問題,同OOP無關
呢個唔係language既問題,而係lib ...
FlyingForever 發表於 2016-3-20 14:55


呢個問題係好明顥係唔明 OOP
佢開哂所有 get set, 然後俾人改 state...

TOP

本帖最後由 evec 於 2016-3-20 17:39 編輯
呢個問題係好明顥係唔明 OOP
佢開哂所有 get set, 然後俾人改 state...
snoopy11hk 發表於 2016-3-20 15:07



    佢講的野,可以話關OOP事,亦可以話無關,或者可以係程式語言設計偏向性。
    試想想: 書 =CLASS  圖書館 = Collection
       一本書賣咗比讀者,你鐘意畫花點都好,係你的事,所以一部書上畫花係無問題
       (畫花 - Public Draw()可以)
     OOP 提倡 - 書》變為圖書館的書》唔比畫花因為書己變成圖書館的書,圖書館自己Override Draw D個Method唔比讀者畫花本書。
   
     Functional - 書=DATA 圖書館借-Function 讀者- 一個變量

    把書拋入 圖書館 》圖書館做一大堆功能的 》拋DATA比個讀者
    DATA 其實可以比讀者亂來,因為是複制一份出來的單純DATA,到最後還書時要拉要賠係另一個FUNCTION的問題,
                     借來交翻出來的書=DATA 圖書館還-Function 讀者一個變量

  細心D看以上問題反映咗Functional的某幾項重要問題,使知根本不能取代 imperative,或者可以看成,Imperative根本係Functional進步式,而純粹Functional根本係唔符合現實世界的電腦應用,或者回歸應用CASIO 計數機(須然我們很多時計數機)。
   
  而且現在所謂的Functional Programming只是包裝成一個Function的Programming,在這個Functional內能否沒有應用任何Imperative來處理問題,OOP的Method本身就是一個進步版的Functional Programming, 可以說OOP能做Functional但Functional不能做OOP否則他就變身為OOP一員,都不明為何近幾年要炒作所謂Functional Programming,更甚一知半解看了網上幾篇文章就以為Scala是Functional。

現在提倡使用Functional 只是更緊湊地地Pack在一起使之更符合多核心環境下使用,一般這種環境本身就是資料可以平衡運算,不能平衡的你死命用Functional來包都是用不到平衡運算的。

佢用D個問題來做例子試圖說明Functional的好處-不會改變之前的資料,而且運用Function後傳回資料再運算可以一步一步追翻上去,試圖以此解釋所謂Scala好過Java,覺得改變OOP內的數值就會改變未來,所以難於Debug,這個是錯誤的,這方面Functional和OOP的除錯難度根本沒分別,Functional還煩多,這只是把除錯範圍擴大,試想想OOP因為數值和運算是分開,只要看準那兒運用該數值把那部份除錯便可以了,OOP的封裝子母奶就是為了除錯方便,母級無問題,集中看子級的數值或Method有沒有問題便成,
如果是Functional,你是要從尾開始一直向上找尋每一句都讀一次,當然Functional提倡每個Function都只是一個黑盒一個輸出,
但這個輸出沒問題就好,入面無問題,所以集中處理外面問題吧,事實有沒有這麼理想,如果一個Funtional要Loop幾篇,到時根本連那個輸入變量做成問題都難於找到,所以一般唔知頭唔知路先覺得 Functional 好易用,有經驗就知 Functional大頭腦,除非聰明絕頂勁編程家,但有幾多個係有能力,最恐怖係無能力的又要以為有能力唔知死。

TOP

呢條thread好有技術深度。

TOP

回覆 62# evec

switch case在bytecode有機會調用到tableswitch
worst case都係lookupswitch 等同if-else

TOP

本帖最後由 hihihi123hk 於 2016-3-20 21:57 編輯
回覆  evec

switch case在bytecode有機會調用到tableswitch
worst case都係lookupswitch 等同if-else ...
marco709394 發表於 2016-3-20 21:29


   
無錯

Compile 變 JVM byte code 嗰時會做 Optimazation

其實一 Google 就會搵到,不過啲咁 Fundamental 嘅野,唔搵過唔知其實都好合理,但最好就唔好誤導到人 ( 將自己認為係咁樣嗰套講到似層層)

http://stackoverflow.com/questio ... -the-bytecode-level

via HKEPC Ionic Reader v1.2.9 - iPhone

TOP