天天看點

《Clojure程式設計樂趣》—— 第1章,第1.3節函數式程式設計

本節書摘來自異步社群《clojure程式設計樂趣》一書中的第1章,第1.3節函數式程式設計,作者 【美】michael fogus , chris houser,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

1.3 函數式程式設計

clojure程式設計樂趣

快點回答,函數式程式設計是什麼意思?錯!

别太洩氣,其實,我們也不知道确切的答案是什麼。函數式程式設計隻是諸多定義模糊的計算機術語1中的一個。如果找100個程式員問它的定義,我們會得到100個不同的答案。确實,某些答案是類似的,但如同雪花一般,沒有兩個答案是完全一樣的。要進一步攪混水的話,讓計算機科學的專家們單獨給出定義,我們可能會發現,某些答案甚至是彼此沖突的。同樣,任何一個函數式程式設計定義的基本結構都可能會不同,這完全取決于回答問題的人喜歡用哪種語言寫程式:haskell、ml、factor、unlambda、ruby、qi等。随便一個人、一本書或是一門語言怎麼就能聲稱自己是函數式程式設計的權威呢?然而,正如大多數各具特色的雪花都是由水組成的,各種說法的函數式程式設計核心都遵循着同樣的核心原則。

1.3.1 一個可行的函數式程式設計定義

無論函數式程式設計定義用的是lambda演算、單子i/o(monadic i/o)、delegate還是java.lang. runnable,基本的單元可能就是某種形式的過程、函數或是方法—這是根本。函數式程式設計關心和處理的是函數的應用群組合。再進一步,一門被認為是函數式的語言,它的函數概念一定是一等的。在這門語言裡,函數可以存儲、可以傳遞,還可以傳回,同語言裡的其他資料一樣。各種不同的定義遠遠超出了這一核心概念,但是,謝天謝地,作為起點,這足夠了。當然,我們還會進一步闡述一下clojure風格的函數式程式設計,包括純粹性、不變性、遞歸、惰性和引用透明等主題,不過,這些東西稍後會在第7章讨論。

1.3.2 函數式程式設計的内涵

一般說來,面向對象程式員和函數式程式員看到問題和解決問題的方式有所不同。面向對象思維模式采用的方式是,把應用領域定義成一組名詞(類),函數式思維模式則會把解決方案視為各種動詞及其組合(函數)。雖然二者産生的結果可能是一樣的,但函數式解決方案會在簡潔、可了解、可重用方面更勝一籌。确實如此!希望在本書結束時你也會認同,函數式程式設計會讓程式設計更為優雅。這是一種思維模式的轉換,從考慮名詞,到思考動詞,但這個旅程物有所值。無論如何,我們都相信,clojure會讓你獲益良多,反哺到你選擇的語言中—唯有打開心胸,方能體會這一點。

1快點回答,組合子(combinator)的定義是什麼?雲計算呢?企業級呢?soa呢?web 2.0呢?真實世界呢?黑客呢?通常,追求有唯一準确定義這件事無異于緣木求魚。

上一篇: C語言
下一篇: C語言

繼續閱讀