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