成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

編程語言圣經之卷一

開發 開發工具
上古時期,人類主要使用二進制編程,人類需要記住數據在內存的地址,然后才能進行讀寫操作。比如取出地址為0x3A6F27處的值, 以及地址為0x3A6F39處的值,然后把兩個值相加起來。

 [[323354]]

第0x00天

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

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

 

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

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

 

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

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

x + y

人類非常高興。

第0x01天

內存中有一段數據,它的值是‭0110 0111 0110 1100 0110 1111 0110 0010‬

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

部落B的人也把它讀了出來,說這是浮點數數 1.116533*10^24

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

三個部落爭論不休。

上帝安慰人類說:你們說得都對!信息=位+上下文。這一串二進制到底表達什么信息,得有上下文才能理解。所以,要有數據類型!

int x ; //表示x指向的是整數

float y; //表示y指向的是浮點數

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

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

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

int *x; // x 是整形指針,可以當地址操作了。

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

x--;

這幫人胡作非為,經常把內存搞得一團糟,于是上帝嚴格限制指針的使用,只讓C, C++等少數語言可以用指針操作內存,其他語言不能使用!

第0x02天

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

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

  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 

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

第0x03天

不滿足的人類發現,程序中經常需要對這些自定義類型做操作,這些操作被稱為函數。

函數和類型是分開的,很不方便。

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

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

人類說:“親愛的上帝, 這是抽象數據類型,只有接口,沒有具體實現啊。”

上帝說:“唉,懶惰的人類,不思考的人類啊,我再送你們一個東西: 類(class), 你們在class中寫代碼實現吧。”

人類非常高興,把數據和函數放到了一起,實現了很多“類”,List, Stack, Queue, Tree......

第0x04天

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

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

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

人類說:仁慈的上帝,我們能不能對一個現成的類改變一點點?

上帝說:當然, 要有生成類的類,也就是模板。

  1. class Stack<T>{ 
  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 ......

上帝告訴人類兩種實現模板的方法,一種是擦除法:

不管你是Stack,還是Stack,編譯后統統變成了 Stack,類型T變成了Object。

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

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

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

第0x05天

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

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

  1. // 現在x是整數類型 
  2. x = 5;   
  3. // x的類型變了,現在是字符串類型 
  4. x = "hello world"    

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

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

動態類型的人則攻擊靜態類型繁瑣,代碼行數多,開發慢,還得用模板這么無用的東西。

于是靜態類型的人開始使用類型推導,原來的代碼是這么寫的:

InternationalCustomerOrderProcessor

又臭又長, 有了類型推導,現在可以這么寫,一下子方便了很多:

var orderProcessor = createInternationalOrderProcessor(customer, order);

支持動態類型的人也不甘示弱,開始在代碼中使用類型標注:

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

這個函數的輸入參數被標注為是字符串(str),返回值也被標注為字符串。

靜態類型的人嘲笑類型標注只在IDE等開發工具中使用,運行時就沒有了。

第0x06天

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

這就是星期天的來歷。

【本文為51CTO專欄作者“劉欣”的原創稿件,轉載請通過作者微信公眾號coderising獲取授權】

 

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2011-07-14 22:25:36

2012-06-23 18:13:39

C語言

2023-09-25 09:27:31

編程語言可視化

2025-06-06 01:25:00

AI古文字學模型

2020-12-30 09:04:32

Go語言TCPUDP

2012-07-12 14:06:10

C語言

2022-09-16 07:32:15

編程計算機命令

2021-07-10 09:02:42

編程語言 TypeScript

2020-10-30 07:11:31

C 語言編程

2010-01-25 15:09:17

C++語言

2023-05-23 14:14:14

技術模型

2018-08-21 13:50:05

編程語言JavaPython

2022-02-23 14:43:50

索引數據庫mysql

2010-06-07 15:57:02

編程語言排行榜框架

2021-04-14 15:53:58

網絡安全C語言wcslen

2016-06-01 16:03:39

emoji圣經

2012-09-04 11:20:31

2022-02-27 14:45:16

編程語言JavaC#

2019-10-21 10:59:52

編程語言JavaC

2011-06-24 09:20:04

編程語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产日韩一区二区 | 日韩精品激情 | 亚洲欧美日韩在线不卡 | 91社区在线观看高清 | 国产精品免费一区二区三区四区 | 国产片侵犯亲女视频播放 | 免费视频99 | 中文字幕在线视频一区二区三区 | 视频在线一区二区 | 亚洲高清视频在线观看 | 国产黄色麻豆视频 | 亚洲国产精品久久 | 中文字幕日本一区二区 | 国产精品一区二区在线观看 | 欧美成人一区二免费视频软件 | 久久久久国产一区二区三区四区 | 亚洲第一色站 | 日韩在线电影 | 伊人久久综合 | 国产精品久久久久久av公交车 | 国产丝袜一区二区三区免费视频 | 狠狠久久 | 9191av| 亚洲成人中文字幕 | 91福利在线导航 | 中文字幕 在线观看 | 国产午夜精品福利 | 三级免费网 | 亚洲小视频在线观看 | 天堂成人国产精品一区 | 黄色一级免费看 | 欧美色成人| 国产午夜精品一区二区三区四区 | 成人久久18免费网站 | 91亚洲精品久久久电影 | 精品久久久久久亚洲综合网 | 亚洲视频精品 | 亚洲欧美视频 | 日本a在线 | 91看片在线观看 | 中文字幕一区在线观看视频 |