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