C語言是函數(shù)式編程語言嗎?
首先給出結(jié)論,是。為什么?
我們不妨先來從面向?qū)ο笄腥搿?/p>
當我們將面向?qū)ο罂醋魇钦Z言的屬性時,c語言是面向?qū)ο笳Z言嗎?眾所周知,c++,java等高級語言都是面向?qū)ο笳Z言,而通常我們說c語言是面向過程的。這是因為c++與java對面向?qū)ο筇峁┝撕芎玫膬?yōu)化,通過類,成員變量與方法,繼承與多態(tài),虛函數(shù)與重載等特性,我們就可以很詳細的抽象對象的模型。但是c語言中只有結(jié)構(gòu)體,結(jié)構(gòu)體內(nèi)部不能定義函數(shù),只能有成員變量,于是我們在用c語言抽象對象模型時遇到了很多困難,所以通常我們說c語言是面向過程的。
但是面向?qū)ο蟮奶岢鍪菫榱司幊趟枷敫玫难葸M,而不是作為劃分語言屬性。換句話講,面向?qū)ο蟮木幊趟枷胧桥c語言無關(guān)的。使用c語言的結(jié)構(gòu)體,結(jié)合函數(shù)指針,我們也可以在c語言中實現(xiàn)c++中類的各項功能,只不過我們做了很多在其他高級語言中編譯器要做的事情,這對開發(fā)者而言很不友好,而且維護成本很高。
這里我要說的是,如果你問我c語言是面向?qū)ο笳Z言嗎?我一樣會回答是。因為面向?qū)ο笫撬枷耄皇莿澐终Z言的屬性。
最后,我們回到問題上,函數(shù)式意味著我們可以將代碼打包封裝,預留出接口,一個函數(shù)可以從接口調(diào)用其它函數(shù)的返回值,并將自身的返回值作為接口供其他函數(shù)調(diào)用。這同樣是一種設(shè)計思想,通過這樣的方式,我們很容易的可以將工程模塊化,實現(xiàn)模塊間的解耦。
無論是語言本身對于函數(shù)式編程的支持與優(yōu)化上還是從編程思想的實現(xiàn)上,c語言顯然都是符合這一特點的。