日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

编程语言圣经(卷一)

發(fā)布時(shí)間:2025/3/21 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编程语言圣经(卷一) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第0x00天

上古時(shí)期,人類主要使用二進(jìn)制編程,人類需要記住數(shù)據(jù)在內(nèi)存的地址,然后才能進(jìn)行讀寫操作。

比如取出地址為0x3A6F27處的值, 以及地址為0x3A6F39處的值,然后把兩個(gè)值相加起來(lái)。

冗長(zhǎng)的、難以記憶的地址讓人類痛苦不堪。

仁慈的上帝要解救人類于苦難之中,他說(shuō):要有變量 ! ?用變量表示內(nèi)存中的值。

人類不解:“那地址呢?”

上帝送給人類一個(gè)叫編譯器的寶貝:“不用擔(dān)心,編譯器把背后的臟活累活都干了,這樣代碼寫起來(lái)就簡(jiǎn)單多了!”

x + y

人類非常高興。

第0x01天

內(nèi)存中有一段數(shù)據(jù),它的值是?0110 0111 0110 1100 0110 1111 0110 0010?

部落A的人把它讀了出來(lái),說(shuō)這是32位整數(shù) 1735159650

部落B的人也把它讀了出來(lái),說(shuō)這是浮點(diǎn)數(shù)數(shù) 1.116533*10^24

部落C的人說(shuō)部落A和部落B都不對(duì),這是一條機(jī)器指令

三個(gè)部落爭(zhēng)論不休。

上帝安慰人類說(shuō):你們說(shuō)得都對(duì)!信息=位+上下文。這一串二進(jìn)制到底表達(dá)什么信息,得有上下文才能理解。所以,要有數(shù)據(jù)類型!

int x ; ? //表示x指向的是整數(shù)

float y; ?//表示y指向的是浮點(diǎn)數(shù)

人類非常高興, 為了方便自己的使用,他們又創(chuàng)造了byte ,boolean , short, char,long 等各種數(shù)據(jù)類型。

有一小撮人非常懷念以前可以直接操作內(nèi)存的日子,那才是自由自在的生活!

仁慈的上帝決定滿足他們:要有指針

int *x; ?// x 是整形指針,可以當(dāng)?shù)刂凡僮髁恕?/p>

x++; ? ?//操作的是地址,而不是值

x--;

這幫人胡作非為,經(jīng)常把內(nèi)存搞得一團(tuán)糟,于是上帝嚴(yán)格限制指針的使用,只讓C, C++等少數(shù)語(yǔ)言可以用指針操作內(nèi)存,其他語(yǔ)言不能使用!

第0x02天

人類很快發(fā)現(xiàn),這些基本的數(shù)據(jù)類型在編程中遠(yuǎn)遠(yuǎn)不夠, 比如想表達(dá)一本書的信息, 需要有名稱,作者,書號(hào),價(jià)格,出版日期等一堆數(shù)據(jù),需要好幾個(gè)數(shù)據(jù)類型組合起來(lái)才行。

上帝告訴人類說(shuō):要有自定義數(shù)據(jù)類型, 把基本的數(shù)據(jù)類型組合起來(lái)!

type?Date{int?year;int?month;int?day; }type?Book{String?name;String?author;float?price;Date?publish_date }

人類非常高興,為了方便自己使用,他們寫出了各種各樣的數(shù)據(jù)類型如Student, Company, Department , Employee, Manager等等。

第0x03天

不滿足的人類發(fā)現(xiàn),程序中經(jīng)常需要對(duì)這些自定義類型做操作,這些操作被稱為函數(shù)。

函數(shù)和類型是分開(kāi)的,很不方便。

上帝說(shuō):要有抽象數(shù)據(jù)類型, 把類型和函數(shù)放到一起

type?Stack{//?數(shù)據(jù)int?size;int?[]?values;???????......//?操作void?push(int?value);int?pop();int?size(); }

人類說(shuō):“親愛(ài)的上帝, 這是抽象數(shù)據(jù)類型,只有接口,沒(méi)有具體實(shí)現(xiàn)啊。”

上帝說(shuō):“唉,懶惰的人類,不思考的人類啊,我再送你們一個(gè)東西: 類(class), 你們?cè)赾lass中寫代碼實(shí)現(xiàn)吧。”

人類非常高興,把數(shù)據(jù)和函數(shù)放到了一起,實(shí)現(xiàn)了很多“類”,List, Stack, Queue, Tree......

第0x04天

人類發(fā)現(xiàn)一個(gè)class定義好了以后,開(kāi)始使用的時(shí)候就不好改變了, 比如:

class?Stack{int?size;int?[]?values;void?push(int?value){......}?int?pop(){....} }

這個(gè)棧只支持push和pop整數(shù),人類想用float型,string型,甚至Student類型,Company類型的棧,還得重新再寫一套代碼,這實(shí)在是太煩人了!

人類說(shuō):仁慈的上帝,我們能不能對(duì)一個(gè)現(xiàn)成的類改變一點(diǎn)點(diǎn)?

上帝說(shuō):當(dāng)然, 要有生成類的類,也就是模板。

class?Stack<T>{int?size;T?[]?values;void?push(T?value){......}?T?pop(){....} }

T 可以是int , String ,Student..... 是一個(gè)可以改變的東西。

于是,人類可以這么使用類了 Stack<int> ?s, ?Stack<String> , Stack<Student> ......

上帝告訴人類兩種實(shí)現(xiàn)模板的方法,一種是擦除法:

不管你是Stack<String>,還是Stack<Student>,編譯后統(tǒng)統(tǒng)變成了 Stack,類型T變成了Object。

class?Stack{int?size?;Object?[]?values;...... }

另外一種是膨脹法,每個(gè)類型自動(dòng)生成一個(gè)新的類Stack_int, Stack_String, Stack_Student......

有個(gè)叫Java的部落使用擦除法,有個(gè)叫C++的部落使用了膨脹法,這些部落每天爭(zhēng)論不休, 讓上帝頭疼不已。

第0x05天

人類出現(xiàn)了特殊的一群人,他們很討厭在代碼中寫類型。

他們說(shuō):一個(gè)變量,在運(yùn)行時(shí)指向什么類型,它就是什么類型,為什么要在代碼中寫出來(lái)呢?多麻煩啊,能不能這樣:

//?現(xiàn)在x是整數(shù)類型 x?=?5;?? //?x的類型變了,現(xiàn)在是字符串類型 x?=?"hello?world"???

上帝決定把他們解救出來(lái):要有動(dòng)態(tài)類型, 你可以不聲明變量的類型了,變量的類型在運(yùn)行時(shí)來(lái)確定。

那些支持類型聲明的人很生氣,他們自稱為靜態(tài)類型,并且對(duì)動(dòng)態(tài)類型展開(kāi)了強(qiáng)大的攻勢(shì):編譯器查不到錯(cuò)誤,IDE中代碼提示弱,代碼不好閱讀,動(dòng)態(tài)一時(shí)爽,重構(gòu)火葬場(chǎng)......

動(dòng)態(tài)類型的人則攻擊靜態(tài)類型繁瑣,代碼行數(shù)多,開(kāi)發(fā)慢,還得用模板這么無(wú)用的東西。

于是靜態(tài)類型的人開(kāi)始使用類型推導(dǎo),原來(lái)的代碼是這么寫的:

InternationalCustomerOrderProcessor<AnonymousCustomer, SimpleOrder<Book>> orderProcessor = createInternationalOrderProcessor(customer, order);

又臭又長(zhǎng), 有了類型推導(dǎo),現(xiàn)在可以這么寫,一下子方便了很多:

var orderProcessor = createInternationalOrderProcessor(customer, order);

支持動(dòng)態(tài)類型的人也不甘示弱,開(kāi)始在代碼中使用類型標(biāo)注:

def?greeting(name:?str)?->?str:return?'Hello?'?+?name

這個(gè)函數(shù)的輸入?yún)?shù)被標(biāo)注為是字符串(str),返回值也被標(biāo)注為字符串。

靜態(tài)類型的人嘲笑類型標(biāo)注只在IDE等開(kāi)發(fā)工具中使用,運(yùn)行時(shí)就沒(méi)有了。

第0x06天

人類的爭(zhēng)斗越來(lái)越激烈,上帝無(wú)法阻止,非常頭疼,他決定休息一天。

這就是星期天的來(lái)歷。

?

后記:本文的思路受到了《代碼之髓》的啟發(fā),這本書講了編程中的基本概念,很不錯(cuò),推薦閱讀。

總結(jié)

以上是生活随笔為你收集整理的编程语言圣经(卷一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。