編程范式全貌概要

引言:經(jīng)常在一些社區(qū)上看到莫名的一句話PHP是世界上最好的語言,在語言的爭論上,確實(shí)是大有華山論劍的門派之爭。本文將通過編程語言的范式角度番枚,來了解整個(gè)編程語言的發(fā)展史法严,同時(shí)更清晰的認(rèn)知編程范式,以達(dá)到知己知彼葫笼,百戰(zhàn)不殆

??編程語言發(fā)展到今天深啤,出現(xiàn)了好多不同的代碼編寫方式,但不同的方式解決的都是同一個(gè)問題路星,那就是如何寫出更為通用溯街、更具可重用性的代碼或模塊。

一洋丐、從C語言談起

??C語言的歷史悠久呈昔,自其問世以來,其影響了太多太多的編程語言垫挨,到現(xiàn)在還一直被廣泛使用韩肝,不得不佩服它的生命力。但是九榔,我們也要清楚的知道哀峻,大多數(shù)的使用C語言來做內(nèi)核的編程語言其實(shí)都是在改善C語言帶來的問題+時(shí)代發(fā)展帶來的變化。
下面來簡單回顧下C語言的特性:

  1. C 語言是一個(gè)靜態(tài)弱類型語言哲泊,在使用變量時(shí)需要聲明變量類型剩蟀,但是類型間可以有隱式轉(zhuǎn)換;
  2. 不同的變量類型可以用結(jié)構(gòu)體(struct)組合在一起切威,以此來聲明新的數(shù)據(jù)類型育特;
  3. C 語言可以用 typedef 關(guān)鍵字來定義類型的別名,以此來達(dá)到變量類型的抽象先朦;
  4. C 語言是一個(gè)有結(jié)構(gòu)化程序設(shè)計(jì)缰冤、具有變量作用域以及遞歸功能的過程式語言;
  5. 通過指針喳魏,C 語言可以容易地對內(nèi)存進(jìn)行低級控制棉浸,然而這加大了編程復(fù)雜度;
  6. 編譯預(yù)處理讓 C 語言的編譯更具有彈性刺彩,比如跨平臺迷郑。

然而,在代碼組織和功能編程上创倔,C語言的上述嗡害,卻不那么美妙了,eq:

//一個(gè)簡單的交換兩個(gè)變量的函數(shù)
void changeVar(int* x, int* y)
{
    int tmp = *x;
    *x = *y;
    *y = tmp;
}

可以想一想畦攘,這里為什么要用指針呢霸妹?因?yàn)槿绻挥弥羔樀脑挘皇莻鬟M(jìn)來的行參念搬,即函數(shù)的形參是調(diào)用實(shí)參的一個(gè)拷貝抑堡,函數(shù)閉包里對形參的修改無法影響實(shí)參的結(jié)果摆出。

然而,這個(gè)函數(shù)最大的問題是int tmp = *x決定了這個(gè)函數(shù)只能給int值使用首妖,但是還有好多類型也等著能被調(diào)用呢偎漫,eq:double、float有缆、string等象踊,這就是個(gè)靜態(tài)語言最糟糕的問題。

當(dāng)然棚壁,這個(gè)時(shí)候大家都會想到類型轉(zhuǎn)換杯矩,然而對于C語言的類型轉(zhuǎn)換,是會出現(xiàn)很多問題的袖外。

  • 比如:一個(gè) double a[10] 的數(shù)組史隆,a[2] 意味著 a + sizeof(double) * 2。如果你把 a 強(qiáng)轉(zhuǎn)成 int曼验,那么 a[2] 就意味著 a + sizeof(int) * 2泌射。我們知道 sizeof(double) 是 8,而 sizeof(int) 是 4鬓照。于是訪問到了不同的地址和內(nèi)存空間熔酷,這就導(dǎo)致程序出現(xiàn)嚴(yán)重的問題。下面這種使用臨時(shí)交換數(shù)據(jù)的buffer拷貝方案可以去掉類型轉(zhuǎn)換時(shí)導(dǎo)致的地址變換:
//加入泛型變量的交換兩個(gè)變量的函數(shù)
void changeVar(void* x, void* y, size_t size)
{
    char tmp[size];  //交換數(shù)據(jù)時(shí)需要用的 buffer
    memcpy(tmp, y, size);                                          
    memcpy(y, x, size);
    memcpy(x, tmp, size);
    /**
    * 1.函數(shù)接口中增加了一個(gè)size參數(shù)豺裆,用了 void* 后拒秘,類型被“抽象”掉了
,編譯器不能通過類型得到類型的長度了臭猜,所以躺酒,需要我們手動地加上一個(gè)類型長度的標(biāo)識。
2.函數(shù)的實(shí)現(xiàn)中使用了memcpy()函數(shù)蔑歌,因?yàn)轭愋捅弧俺橄蟆钡袅耍圆荒苡觅x值表達(dá)式了丐膝,很有可能傳進(jìn)來的參數(shù)類型還是一個(gè)結(jié)構(gòu)體,因此帅矗,為了要交換這些復(fù)雜類型的值,我們只能使用內(nèi)存復(fù)制的方法了煞烫。
    */
}

除了上面使用void* 來做泛型浑此,在C語言中,還可以用宏定義來做泛型凛俱,不過卻會帶來宏的字符串替換,導(dǎo)致代碼膨脹蒲犬,導(dǎo)致編譯出的執(zhí)行文件相對較大朱监,此處感興趣的可以去深入學(xué)習(xí)一下。

還有 92% 的精彩內(nèi)容
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
支付 ¥2.00 繼續(xù)閱讀
  • 序言:七十年代末原叮,一起剝皮案震驚了整個(gè)濱河市赫编,隨后出現(xiàn)的幾起案子奋隶,更是在濱河造成了極大的恐慌,老刑警劉巖唯欣,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件境氢,死亡現(xiàn)場離奇詭異蟀拷,居然都是意外死亡产还,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門愈诚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牛隅,“玉大人,你說我怎么就攤上這事媒佣。” “怎么了默伍?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵也糊,是天一觀的道長。 經(jīng)常有香客問我狸剃,道長,這世上最難降的妖魔是什么虑省? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮探颈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘膝擂。我一直安慰自己,他們只是感情好狞山,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布叉寂。 她就那樣靜靜地躺著,像睡著了一般屏鳍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驳遵,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天山涡,我揣著相機(jī)與錄音,去河邊找鬼鸭丛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瘾带,可吹牛的內(nèi)容都是我干的熟菲。 我是一名探鬼主播看政,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼帽衙,長吁一口氣:“原來是場噩夢啊……” “哼贞绵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起榨崩,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翩剪,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體前弯,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秫逝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年违帆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浙巫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刷后。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖丧裁,靈堂內(nèi)的尸體忽然破棺而出含衔,到底是詐尸還是另有隱情煎娇,我是刑警寧澤抱慌,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布抑进,位于F島的核電站强经,受9級特大地震影響寺渗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜信殊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一涡拘、第九天 我趴在偏房一處隱蔽的房頂上張望玲躯。 院中可真熱鬧,春花似錦跷车、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至或渤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間劳坑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工涝开, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留框仔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓离斩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寻馏。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 編程范式 托馬斯.庫爾提出“科學(xué)的革命”的范式論后,Robert Floyd在1979年圖靈獎的頒獎演說中使用了編...
    zhoulujun閱讀 282評論 0 1
  • Swift的編程范式 編程范式是程序語言背后的思想漾岳。代表了程序語言的設(shè)計(jì)者認(rèn)為程序應(yīng)該如何被構(gòu)建和執(zhí)行。常見的編程...
    Bobby0322閱讀 2,585評論 4 43
  • 編程范式[ 程序員的編程世界觀 ] 編程范式(Programming Paradigm)是某種編程語言的典型編程風(fēng)...
    Albert陳凱閱讀 887評論 0 1
  • 昨天趁著工作之余,看了左耳聽風(fēng)陳浩老師的《編程范式游記》系列文章捅儒,原文鏈接如下:https://time.geek...
    梧上擎天閱讀 1,392評論 0 2
  • 什么是編程范式 編程范式一詞最早來自 Robert Floyd 在 1979 年圖靈獎的頒獎演說振亮,是程序員看待程序...
    _張曉龍_閱讀 2,997評論 5 19