今天在隨便看一些文章及思考的時候,忽然就悟到了,這種感受就象當年某一天領悟了面向對象。哈哈,我終於打通了任督二脈.html
順便看下,園齡恰好10年了。編程
當年理解面向對象後隨手寫了這篇:架構
http://www.cnblogs.com/DSharp/archive/2005/01/28/98632.html函數式編程
面向對象編程的兩頂帽子 函數
其實就是理解了面向對象的根本,定義和實現的兩個面,經過接口關聯了起來。世界都是經過這種方式來分類呈現的。所謂易經的陰和陽,陰陽轉化不過如此。學習
今天領悟到的,就是易經裏的那個不易,不變,就是函數式,函數的不變性,一致性,函數做爲描述抽象及原理的,做爲第一類的函數first function,就是終極。spa
全部的變化,最後都經過函數串了起來。而變化的後面,就是不變,以不變應萬變。函數就是至關於太極,無級就圖靈機,Lambda,太極就是函數。htm
易有太極,始生兩儀,兩儀生四象,四象生八卦。對象
函數產生了定義及調用。又產生了參數和返回值。最後組成了對象的定義和實現,而後派生了整個計算機世界。blog
可見,函數式編程的first function,改成all function也是能夠的。先拋開函數式和麪向對象的混合編程。咱們來窺探下函數式。
函數的終級原理就是函數,函數是純數學模型,具備不變性。好比function add(a, b) {return a + b};這就是函數式編程的原子。它就是一條數學規則。一致的輸入產生一致的輸出,好比咱們給入1,1,給出永遠是2.
那麼函數式編程所架構的世界觀,就至關於咱們現實世界的物理及宇宙法則。變量是什麼?是一個輸入,爲何會有最初始的輸入,這個已經無需考證,從虛空的無極誕生了太極,道生了一,而後就開始函數式演變了。
因此函數式編程的特色就在於所處規則,至於輸入,在現實當中順其天然就OK,咱們關心的就是規則,好比上面的Add,這個規則一但實現,那麼就能夠搞定全部的加法,這就是函數式的威力,你就象是計算機中的上帝,你須要的就是制定規則。
那麼函數式開發和如今流行的開發差別在哪裏?咱們搞面向對象,咱們要去作實體,數據,控制器,業務邏輯,全部都是在模擬現實,而對象是什麼?是變化的中間態,個體,實體,1,是一個對象,2,又是一個對象,張三是一個,李四又是一個。
而後呢,咱們去作對象的類,就是類型抽象,人是一類,動物是一類,不停的分類,最終你會發現,分類也是無窮無盡的。這是一個永完也作不完的任務。
而函數式呢?定義規則,或者說聲明,聲明式編程,咱們根本無需考慮類型和實體。因此說類型表面上好象很厲害,實際上,天地以萬物爲走狗,在上帝眼裏,碼農和土豪是同樣同樣的。
咱們只要分規則就能夠,一條大規則太複雜,怎麼辦呢?細分,函數嵌套,高階函數,柯里化,好比add(funa(a), funb(b)), 規則要反覆使用呢?遞歸。
在函數規則上使用幾個大原則,世界就被定義出來了。這就是函數式!
固然了,理解了只是入世,咱們還要出世賺錢,窮則省吃儉用,達則請客吃飯,接下來,理論聯繫實際,幹出點有用的東西,仍是須要不斷的學習及探索的。