關於語言

自從入坑以來,七七八八的也用過了不少編程語言了。

一直都是處於學語法,寫代碼的程度。從來沒有認真想過編程語言是什麼。

也許是老了,有時候也不會悶頭往前衝,而是停下來,靜靜的想一下,自己在寫什麼,爲什麼會這麼寫。

 

程序這種東西,最終的目的是讓cpu來處理數據,只是因爲過程太過複雜,慢慢的演變出來很多種語言。

[處理數據],很簡單的一句話,那麼就包括了[數據]和[處理]兩個概念。複雜的程序,自然也會包括複雜的數據,也包括複雜的處理。

那麼我們要做的就是合理的去歸類數據,合理的安排處理的邏輯,這裏的處理在程序上就是表現爲方法。

 

一個語言要解決的問題,就是數據如何傳遞,另外一個是方法如何串聯。

 

最早接觸的是c和pascal這樣的語言,這類語言比較初級,數據和方法比較零碎,完全由程序員自己去歸類這些東西。

這時候,如果擺放不合理,就會發生方法依賴錯綜複雜,數據傳遞極其繁瑣的情況。

 

後來開始接觸面嚮對象語言,類似於java一類。

一個類就是數據和方法的組合。從某種程度上,幫助程序員進行了歸類。

但是在實際使用中你會發現,大多數情況,一個類要麼就是一個數據的組合,要麼就是方法的組合,反而數據和方法同時出現的情況比較少。

用java開發web應用的情況非常多見,看看form,dto,entity等類型的類,基本就是pojo實際上是不帶有任何處理方法的,而controller或action,

service,logic,dao等,又都是方法簇,並沒有任何的數據,那麼數據的傳遞卻是通過方法參數以及返回值來實現。

這哪裏體現了面向對象的優越性了?

當然,之所以這麼做,也可能是妥協的結果,因爲這樣的設計比較好測試。

 

另外還有一些其它語言比如golang,暫且不去討論它是不是屬於面嚮對象語言,那麼從數據和方法的安排上來看,數據用struct來描述,

方法當然可以獨立存在,也可以作爲類方法賦給struct,那麼在實際應用中,會發現,很多struct是空的,它的目的只有一個,就是歸類許多個類方法形成一個方法簇,

這樣的實現給上面java web開發中的contoller的應用沒有任何區別。

 

既然上面看起來並不是特別的完美,那麼函數式編程呢?函數式編程同樣數據是數據,但是方法調用的話,卻是通過傳遞方法變量的方式,把方法調用串聯起來。

這樣的組合方式跟以前面向過程編程中的函數調用有啥不同呢?一個就是同類方法組合的重用,類似於面向對象編程中泛型的使用,另外一個就是柯里化。

其實挺討厭柯里化的,因爲使用了柯里化,也就意味着時刻注意context chain,如果搞不清楚這個的話,你就會迷失在調用深淵裏,比起面向過程的編程方法難理解多了。

 

可見編程語言裏沒有銀彈這不是說着玩的。

以上是這些年來的編程感受,語言匱乏,不一定能反映出內心的想法,同時描述也不甚準確,希望不會誤導別人。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章