自從入坑以來,七七八八的也用過了不少編程語言了。
一直都是處於學語法,寫代碼的程度。從來沒有認真想過編程語言是什麼。
也許是老了,有時候也不會悶頭往前衝,而是停下來,靜靜的想一下,自己在寫什麼,爲什麼會這麼寫。
程序這種東西,最終的目的是讓cpu來處理數據,只是因爲過程太過複雜,慢慢的演變出來很多種語言。
[處理數據],很簡單的一句話,那麼就包括了[數據]和[處理]兩個概念。複雜的程序,自然也會包括複雜的數據,也包括複雜的處理。
那麼我們要做的就是合理的去歸類數據,合理的安排處理的邏輯,這裏的處理在程序上就是表現爲方法。
一個語言要解決的問題,就是數據如何傳遞,另外一個是方法如何串聯。
最早接觸的是c和pascal這樣的語言,這類語言比較初級,數據和方法比較零碎,完全由程序員自己去歸類這些東西。
這時候,如果擺放不合理,就會發生方法依賴錯綜複雜,數據傳遞極其繁瑣的情況。
後來開始接觸面嚮對象語言,類似於java一類。
一個類就是數據和方法的組合。從某種程度上,幫助程序員進行了歸類。
但是在實際使用中你會發現,大多數情況,一個類要麼就是一個數據的組合,要麼就是方法的組合,反而數據和方法同時出現的情況比較少。
用java開發web應用的情況非常多見,看看form,dto,entity等類型的類,基本就是pojo實際上是不帶有任何處理方法的,而controller或action,
service,logic,dao等,又都是方法簇,並沒有任何的數據,那麼數據的傳遞卻是通過方法參數以及返回值來實現。
這哪裏體現了面向對象的優越性了?
當然,之所以這麼做,也可能是妥協的結果,因爲這樣的設計比較好測試。
另外還有一些其它語言比如golang,暫且不去討論它是不是屬於面嚮對象語言,那麼從數據和方法的安排上來看,數據用struct來描述,
方法當然可以獨立存在,也可以作爲類方法賦給struct,那麼在實際應用中,會發現,很多struct是空的,它的目的只有一個,就是歸類許多個類方法形成一個方法簇,
這樣的實現給上面java web開發中的contoller的應用沒有任何區別。
既然上面看起來並不是特別的完美,那麼函數式編程呢?函數式編程同樣數據是數據,但是方法調用的話,卻是通過傳遞方法變量的方式,把方法調用串聯起來。
這樣的組合方式跟以前面向過程編程中的函數調用有啥不同呢?一個就是同類方法組合的重用,類似於面向對象編程中泛型的使用,另外一個就是柯里化。
其實挺討厭柯里化的,因爲使用了柯里化,也就意味着時刻注意context chain,如果搞不清楚這個的話,你就會迷失在調用深淵裏,比起面向過程的編程方法難理解多了。
可見編程語言裏沒有銀彈這不是說着玩的。
以上是這些年來的編程感受,語言匱乏,不一定能反映出內心的想法,同時描述也不甚準確,希望不會誤導別人。