談談函式式程式設計的優點(1)
(注:這是作者本人的體會和隨想,想到那裡寫到**,不定時更新,有錯誤請指出。)
函式式程式設計(fp)和物件導向(oo)是兩種不同的程式設計正規化,近幾年,隨著對fp的重新認識,不少人認為相比oo,fp有一些明顯的有點,不少地方甚至於更近一籌。
為何他們認為函式式程式設計(fp)優於物件導向(oo)?
思想不同,重用粒度不同,fp中的粒度更小。
在oo中,認為萬物皆物件。
舉例來說,在oo中,已經有乙個衣櫃類,可以現在需要一鞋櫃,怎麼辦?衣櫃和鞋櫃粗看起來差不多,可具體構成的細節卻有不少差別,衣櫃用來放衣服,比較高,要有吊桿能掛衣架,裡邊可能有格擋可能沒有。鞋櫃用來放鞋,比較矮,裡邊格擋比較密集,等等。
oo提供了現成的衣櫃,和繫結作用作用於衣櫃上的操作。使用oo解決此問題,有兩種方法:一種是在類層次中新增抽象「櫃子類」,然後將「鞋櫃」從抽象「櫃子類」繼承,這種方法需要修改衣櫃類,抽象衣櫃類的操作,然後修改「衣櫃」類。另一種是改裝衣櫃類,反正衣櫃鞋櫃看起來差不多,改改也湊合著能用。
使用oo解決此問題的核心思想是「改裝」。
oo思想的核心是資料和操作繫結,操作的重用性天生就要弱。在上例中,要不改裝衣櫃類,要不就拋開重用,重新實現乙個鞋櫃類。
而用fp的觀點,雖然提供了現成的衣櫃型別,可更重要的是提供了構成衣櫃的半成品與原材料,例如三合板,結合膠等等。你不用想著怎麼將「衣櫃」改造為「鞋櫃」,你可以選擇參照或不參照鞋櫃,使用半成品很方便的組裝乙個鞋櫃。這樣,無論是衣櫃,鞋櫃,甚至於書櫃,你可以很方便的組合出來。
使用fp解決此問題的核心思想是「組裝」。
如果說oo是**塊復用,那麼fp就是**片段復用。oo脫胎於命令式的程式語言,從重用的角度上天生就要弱於fp。
函式式程式設計好在**?
通過這些年的工程實踐,業界普遍認識到了繼承的資料耦合形態高,認為「組合優於繼承」,可「繼承」畢竟是oo的核心思想之一。這些年以來,各種業界主流程式語言紛紛加入對於fp的支援,例如在c++11中,新增了對lamda表示式與匿名函式的支援。工程師已經熟悉了命令式的程式設計,學習fp曲線比較陡峭,這是fp流行不廣的最重要的原因之一。
談談函式式程式設計與推導式程式設計
lambda 返回函式 f lambda x,y x y f 3,5 8 推導式 out x 2 for x in range 4 也可多新增 x,y for x in range 4 for y in rannge x 還可以增加判斷語句 x,y for x in range 4 for y in...
1 函式式程式設計
關注點不同 命令式程式設計關注的是怎樣做,告訴程式怎樣做,才能達到乙個功能 而函式式是關注做什麼,不需要告訴怎麼做,不需要關注實現的細節,告訴它要實現什麼功能即可 舉例 在一堆數字裡面找到最小的值,兩種實現方式如下 什麼是函式式程式設計 public class whyuselambda old n...
談談程式設計 1 程式設計概述
程式設計術可以看作實用魔法的乙個分支。程式設計魔法師用時間和精力做祭品,與生活在計算機中的精靈訂立契約,以換取駕馭 的能力。fmddlmyy 本文將從不同角度討論 什麼是程式設計 或者 什麼是程式設計的本質問題 這些討論並不是要得出什麼定義,我們實際上是在表述各種程式設計思想,以期加深對程式設計的理...