日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
編程語言圣經(jīng)之卷一

 [[323354]]

公司主營業(yè)務(wù):成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出黃南州免費(fèi)做網(wǎng)站回饋大家。

第0x00天

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

比如取出地址為0x3A6F27處的值, 以及地址為0x3A6F39處的值,然后把兩個值相加起來。

 

冗長的、難以記憶的地址讓人類痛苦不堪。

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

 

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

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

x + y

人類非常高興。

第0x01天

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

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

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

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

三個部落爭論不休。

上帝安慰人類說:你們說得都對!信息=位+上下文。這一串二進(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ù)語言可以用指針操作內(nèi)存,其他語言不能使用!

第0x02天

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

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

 
 
 
 
  1. type Date{ 
  2.     int year; 
  3.     int month; 
  4.     int day; 
  5.  
  6. type Book{ 
  7.     String name; 
  8.     String author; 
  9.     float price; 
  10.     Date publish_date 

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

第0x03天

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

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

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

 
 
 
 
  1. type Stack{ 
  2.     // 數(shù)據(jù) 
  3.     int size; 
  4.     int [] values;        
  5.     ...... 
  6.     // 操作 
  7.     void push(int value); 
  8.     int pop(); 
  9.     int size(); 

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

上帝說:“唉,懶惰的人類,不思考的人類啊,我再送你們一個東西: 類(class), 你們在class中寫代碼實(shí)現(xiàn)吧?!?/p>

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

第0x04天

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

 
 
 
 
  1. class Stack{ 
  2.     int size; 
  3.     int [] values; 
  4.     void push(int value){ 
  5.          ...... 
  6.     }  
  7.     int pop(){ 
  8.        .... 
  9.     } 

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

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

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

 
 
 
 
  1. class Stack
  2.     int size; 
  3.     T [] values; 
  4.     void push(T value){ 
  5.          ...... 
  6.     }  
  7.     T pop(){ 
  8.        .... 
  9.     } 

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

于是,人類可以這么使用類了 Stack s, Stack , Stack ......

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

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

 
 
 
 
  1. class Stack{ 
  2.     int size ; 
  3.     Object [] values; 
  4.     ...... 

另外一種是膨脹法,每個類型自動生成一個新的類Stack_int, Stack_String, Stack_Student......

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

第0x05天

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

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

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

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

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

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

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

InternationalCustomerOrderProcessor

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

var orderProcessor = createInternationalOrderProcessor(customer, order);

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

 
 
 
 
  1. def greeting(name: str) -> str: 
  2.     return 'Hello ' + name 

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

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

第0x06天

人類的爭斗越來越激烈,上帝無法阻止,非常頭疼,他決定休息一天。

這就是星期天的來歷。

【本文為專欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請通過作者微信公眾號coderising獲取授權(quán)】


當(dāng)前名稱:編程語言圣經(jīng)之卷一
網(wǎng)站鏈接:http://m.5511xx.com/article/djdigso.html