摘要:基因追本溯源在編程語言的歷史長(zhǎng)河中,曾經(jīng)出現(xiàn)過很多編程語言。的歷史繼承年,網(wǎng)景公司招募了,目的是將編程語言嵌入到中。網(wǎng)景公司決定,他們想創(chuàng)建的腳本語言將補(bǔ)充,并且應(yīng)該有一個(gè)類似的語法,排除采用,,或等其他語言。
引子: 很多時(shí)候,當(dāng)我要字符串截取時(shí),我會(huì)想到substr和substring的方法,但是具體要怎么傳參數(shù)時(shí),我總是記不住。哪個(gè)應(yīng)該傳個(gè)字符串長(zhǎng)度,哪個(gè)又應(yīng)該傳個(gè)開始和結(jié)尾的下標(biāo),如果我不去查查這兩個(gè)函數(shù),我始終不敢去使用它們。所以我總是覺得,這個(gè)兩個(gè)方法名起的真是蹩腳。然而事實(shí)是這樣的嗎?
看來是時(shí)候扒一扒這兩個(gè)方法的歷史了。
1 基因追本溯源在編程語言的歷史長(zhǎng)河中,曾經(jīng)出現(xiàn)過很多編程語言。然而大浪淘沙,鉛華洗盡之后,很多早已折戟沉沙,有些卻依舊光彩奪目。那么stubstr與substring的DNA究竟來自何處?
1950與1960年代
1954 - FORTRAN
1958 - LISP
1959 - COBOL
1964 - BASIC
1970 - Pascal
1967-1978:確立了基礎(chǔ)范式
1972 - C語言
1975 - Scheme
1978 - SQL (起先只是一種查詢語言,擴(kuò)充之后也具備了程序結(jié)構(gòu))
1980年代:增強(qiáng)、模塊、性能
1983 - C++ (就像有類別的C)
1988 - Tcl
1990年代:互聯(lián)網(wǎng)時(shí)代
1991 - Python
1991 - Visual Basic
1993 - Ruby
1995 - Java
1995 - Delphi (Object Pascal)
1995 - JavaScript
1995 - PHP
2009 - Go
2014 - Swift (編程語言)
1.1 在C++中首次出現(xiàn)substr()在c語言中,并沒有出現(xiàn)substr或者substring方法。然而在1983,substr()方法已經(jīng)出現(xiàn)在C++語言中了。然而這時(shí)候還沒有出現(xiàn)substring, 所以可以見得:substr是stustring的老大哥
string substr (size_t pos = 0, size_t len = npos) const;
從C++的方法定義中可以看到, substr的參數(shù)是開始下標(biāo),以及字符串長(zhǎng)度。
std::string str="We think in generalities, but we live in details."; std::string str2 = str.substr (3,5); // "think"1.2 在Java中首次出現(xiàn)substring()
距離substr()方法出現(xiàn)已經(jīng)有了將近十年之隔,此間涌現(xiàn)一批后起之秀,如: Python, Ruby, VB之類,然而他們之中并沒有stustring的基因,在Java的String類中,我們看到兩個(gè)方法。從這兩個(gè)方法之中我們可以看到:substring方法基本原型的參數(shù)是開始和結(jié)束的下標(biāo)。
String substring(int beginIndex) // 返回一個(gè)新的字符串,它是此字符串的一個(gè)子字符串。 String substring(int beginIndex, int endIndex) // 返回一個(gè)新字符串,它是此字符串的一個(gè)子字符串。1.3 JavaScript的歷史繼承
1995年,網(wǎng)景公司招募了Brendan Eich,目的是將Scheme編程語言嵌入到Netscape Navigator中。在開始之前,Netscape Communications與Sun Microsystems公司合作,在Netscape Navigator中引入了更多的靜態(tài)編程語言Java,以便與微軟競(jìng)爭(zhēng)用戶采用Web技術(shù)和平臺(tái)。網(wǎng)景公司決定,他們想創(chuàng)建的腳本語言將補(bǔ)充Java,并且應(yīng)該有一個(gè)類似的語法,排除采用Perl,Python,TCL或Scheme等其他語言。為了捍衛(wèi)對(duì)競(jìng)爭(zhēng)性提案的JavaScript的想法,公司需要一個(gè)原型。 1995年5月,Eich在10天內(nèi)寫完。
上帝用七天時(shí)間創(chuàng)造萬物, Brendan Eich用10天時(shí)間創(chuàng)造了一門語言。或許用創(chuàng)造并不合適,因?yàn)镴avaScript是站在了Perl,Python,TCL或Scheme等其他巨人的肩膀上而產(chǎn)生的。
JavaScript并不像C那樣出身名門,在貝爾實(shí)驗(yàn)室精心打造,但是JavaScript在往后的自然選擇中,并沒有因此蕭條,反而借助于C,C++, Java, Perl,Python,TCL, Scheme優(yōu)秀基因,進(jìn)化出更加強(qiáng)大強(qiáng)大的生命力。
因此可以想象,在10天之內(nèi),當(dāng)Brendan Eich寫到String的substr和substring方法時(shí),或許他并沒困惑著兩個(gè)方法的參數(shù)應(yīng)該如何設(shè)置,因?yàn)樵贑++和Java的實(shí)現(xiàn)中,已經(jīng)有了類似的定義。 如果你了解歷史,你就不會(huì)困惑現(xiàn)在。
2 所以,substr和substring究竟有什么不同?如下圖所示:substr和substring都接受兩個(gè)參數(shù),他們的第一個(gè)參數(shù)的含義是相同的,不同的是第二個(gè)參數(shù)。substr的第二個(gè)參數(shù)是到達(dá)結(jié)束點(diǎn)的距離,substring是結(jié)束的位置。
3 參考文獻(xiàn)維基百科:程式語言歷史
C++ std::string::substr
JavaScript
如有不正確的地方,歡迎指正。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/90377.html
摘要:基因追本溯源在編程語言的歷史長(zhǎng)河中,曾經(jīng)出現(xiàn)過很多編程語言。的歷史繼承年,網(wǎng)景公司招募了,目的是將編程語言嵌入到中。網(wǎng)景公司決定,他們想創(chuàng)建的腳本語言將補(bǔ)充,并且應(yīng)該有一個(gè)類似的語法,排除采用,,或等其他語言。 引子: 很多時(shí)候,當(dāng)我要字符串截取時(shí),我會(huì)想到substr和substring的方法,但是具體要怎么傳參數(shù)時(shí),我總是記不住。哪個(gè)應(yīng)該傳個(gè)字符串長(zhǎng)度,哪個(gè)又應(yīng)該傳個(gè)開始和結(jié)尾的下...
摘要:定時(shí)器多次調(diào)用單次調(diào)用可以用來注冊(cè)在指定的時(shí)間之后單詞或重復(fù)調(diào)用的函數(shù),因?yàn)樗鼈兌际强蛻舳说娜趾瘮?shù),所以它們都是對(duì)象瀏覽器信息運(yùn)行在什么平臺(tái)用戶代理瀏覽器定位和導(dǎo)航一個(gè)完整的協(xié)議主機(jī)名端口文檔路徑查詢字符串哈希部分解析中的查詢字符串,它 BOM Brower Object Module(BOM) 定時(shí)器 setInterval() //多次調(diào)用 setTimeout() //單次調(diào)用...
摘要:每次渲染之后記得加個(gè)滾動(dòng)動(dòng)畫,讓瀏覽器盡可能真實(shí)地模擬終端的行為。我們的模擬終端暫時(shí)只是文件和目錄的讀取操作,所以自動(dòng)補(bǔ)全的前提是,系統(tǒng)存儲(chǔ)有完整的目錄和文件。 本文由QQ音樂前端團(tuán)隊(duì)發(fā)表 前段時(shí)間做了一個(gè)非常有意思的模擬終端的展示頁(yè):http://ursb.me/terminal/(沒有做移動(dòng)端適配,請(qǐng)?jiān)赑C端訪問),這個(gè)頁(yè)面非常有意思,它可以作為個(gè)人博客系統(tǒng)或者給 Linux 初學(xué)者學(xué)...
摘要:對(duì)象計(jì)時(shí)器一個(gè)作者的寫的關(guān)于定時(shí)器解釋,記的順手訂閱一下。再次判斷是否存在清除定時(shí)任務(wù)瀏覽器定位和導(dǎo)航對(duì)象的屬性引用的是對(duì)象的。 window對(duì)象 計(jì)時(shí)器 一個(gè)jQuery作者的寫的關(guān)于定時(shí)器解釋,記的順手訂閱一下。John Resig,jQuery之父https://johnresig.com/blog/ho...如果時(shí)間為0,則會(huì)放入隊(duì)列之中,由隊(duì)列進(jìn)行調(diào)用,即生產(chǎn)者-消費(fèi)者模型一...
摘要:最新一直在看關(guān)于和路由這塊的知識(shí),最終發(fā)現(xiàn)這些路由框架的模塊功能的實(shí)現(xiàn)都是基于瀏覽器原生路由的。在瀏覽器中實(shí)現(xiàn)前端路由主要有兩種方式一個(gè)是我們常用的,另一個(gè)是提供的。該對(duì)象的和分別表示的各個(gè)部分,它們因此被稱為分解屬性。 最新一直在看關(guān)于 Vue 和 React 路由這塊的知識(shí),最終發(fā)現(xiàn)這些路由框架的模塊功能的實(shí)現(xiàn)都是基于瀏覽器原生路由 API?的。本著追根溯源的初心,于是就想著將瀏覽...
閱讀 2503·2021-11-15 18:14
閱讀 1725·2021-10-14 09:42
閱讀 3769·2021-10-11 10:58
閱讀 3965·2021-10-09 09:44
閱讀 2427·2021-09-26 09:55
閱讀 2451·2021-09-24 10:38
閱讀 2043·2021-09-04 16:48
閱讀 3280·2021-09-02 15:21