溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用編程中花括號(hào)

發(fā)布時(shí)間:2021-10-25 16:57:32 來源:億速云 閱讀:120 作者:iii 欄目:web開發(fā)

本篇內(nèi)容介紹了“如何使用編程中花括號(hào)”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

首先,以非塊狀語言為例

所有熟悉C風(fēng)格編程語法的程序員都熟悉編程塊,用C、C  ++、Java、JavaScript和其他語言編寫的所有主要編程結(jié)構(gòu)都是塊結(jié)構(gòu)的。換句話說,這些構(gòu)造的主體放置在塊中,這些塊由打開和閉合的花括號(hào)分隔。

有人可能會(huì)說,這并不是完全正確的,因?yàn)?if  語句和循環(huán)(這里只提到兩種編程構(gòu)造),如果它們的主體只有一個(gè)語句,就可以不用塊來構(gòu)造。然而,在過去的幾年里,編程風(fēng)格專家建議將所有的構(gòu)造體放在一個(gè)塊中(參見Douglas  Cockroft的“JavaScript: The Good Parts”中關(guān)于將所有if和循環(huán)體放在塊中的論點(diǎn)特別有說服力)

然而,第一批高級(jí)編程語言并沒有塊。

我將使用大約在20世紀(jì)50年代末的FORTRAN語言來演示這一點(diǎn)。

如何使用編程中花括號(hào)

Donald  Knuth在他關(guān)于早期高級(jí)編程語言的優(yōu)秀評(píng)論文章《編程語言的早期開發(fā)》中比較了幾種早期編程語言的特性,這篇文章轉(zhuǎn)載在他的書《計(jì)算機(jī)語言選集》中。他的做法是,演示某個(gè)計(jì)算機(jī)程序如何用不同的語言實(shí)現(xiàn)。這個(gè)程序?qū)崿F(xiàn)了一個(gè)叫做TPK算法的算法,在現(xiàn)代JavaScript中是這樣的:

function f(t) {   return Math.sqrt(Math.abs(t) + 5 * Math.pow(t, 3)); } let arr = []; let y; for (let i = 0; i < 11; i++) {   putstr("Enter a number: ");   arr[i] = parseFloat(readline()); } for (let i = 10; i >= 0; i--) {   y = f(arr[i])   if (y > 400) {     print(y,"is too large.");   }   else {     print(i,y)   } }

不要擔(dān)心程序做什么。重要的一點(diǎn)是,這個(gè)程序執(zhí)行了Knuth認(rèn)為在現(xiàn)代編程語言中對(duì)測(cè)試很重要的所有特性。

正如我提到的,Knuth將幾種編程語言與該算法進(jìn)行了比較。他最后看過的一種語言,現(xiàn)在通常被認(rèn)為是第一種真正的高級(jí)編程語言。下面是Knuth編寫的TPK程序在Fortran中的樣子:

C   THE TPK ALGORITHM, FORTRAN STYLE     FUNF(T) = SQRTF(ABSF(T))+5.0*T**3     DIMENSION A(11) 1   FORMAT(6F12.4)     READ 1, A     DO 10 J = 1, 11     I = 11 &ndash; J     Y = FUNF(A(I+1))     IF (400.0-Y) 4, 8, 8 4   PRINT 5, I 5   FORMAT(I10, 10H TOO LARGE)     GO TO 10 8   PRINT 9, I, Y 9   FORMAT(I10, F12.7) 10  CONTINUE     STOP 52525

Fortran語法的細(xì)節(jié)我就不多說了,但你可以清楚地看到,該語言不包含塊。函數(shù)定義在一行上,而不是作為代碼塊,DO  循環(huán)使用一個(gè)行標(biāo)簽來控制循環(huán)。當(dāng)時(shí)的高級(jí)語言還沒有將復(fù)合語句分組成塊的概念,這些語言仍然依靠 goto 來控制程序流。

該代碼由Knuth使用1957年的Fortran版本編寫。1957年至1960年間,一種新的語言ALGOL被開發(fā)出來,它彌補(bǔ)了當(dāng)時(shí)Fortran等語言和其他高級(jí)語言的許多缺陷。

Algol中的塊

Algol編程語言首次被描述是在1958年,盡管該語言最流行的版本是Algol  60。Algol的功能之一是將語句分組為復(fù)合語句(稱為塊)的能力,每個(gè)Algol程序都被視為一個(gè)塊,因?yàn)橐粋€(gè)程序通常包含一個(gè)或多個(gè)語句(因此為復(fù)合語句)。Algol的開發(fā)者認(rèn)識(shí)到,許多編程場(chǎng)景,如條件和循環(huán),需要將語句作為一個(gè)單元來考慮。

如何使用編程中花括號(hào)

Algol使用關(guān)鍵字 begin 和 end  標(biāo)記了塊的開始和結(jié)束。一個(gè)區(qū)塊可以嵌套在另一個(gè)區(qū)塊里面,外區(qū)塊被認(rèn)為是主導(dǎo)區(qū)塊,內(nèi)區(qū)塊被認(rèn)為是從屬區(qū)塊。例如,這里有一個(gè)Algol程序,可以嵌套塊:

begin real a;      a := 1;      begin real a;           a := 2;           print(a)      end;      print(a) end

依次打印數(shù)字2和1。

這是在Algol的 if 語句中如何使用塊的示例:

if x > -1 then      begin           if x &ne; 0 then           x := 1/x      end;

這是Algol中 for 循環(huán)塊的示例:

begin      real a0, a1, a2, a3, z, p;      integer n, i;      read(a0, a1, a2, a3);      read(n)      for i := 1 step 1 until n do           begin                read(z);                p := ((a3 &times; z + a2) &times; z + a1) &times; z + a0                print(p)           end i end

現(xiàn)在讓我們看看Algol中的TPK程序,看看與Fortran版本相比,塊結(jié)構(gòu)對(duì)該程序有什么幫助:

TPK begin integer i, real y; real a[0:10];      real procedure f(t); real  t; value t;      f := sqrt(abs(t)) + 5 &times; t &uarr; 3;      for i := 0 step 1 until 10 do read(a[i]);      for i := 10 step -1 until 0 do           begin y := f(a[i]);                if y > 400 then write(I, 'TOO LARGE')                else write(i, y);           end end TPK

你應(yīng)該能看出來,Algol版本的區(qū)塊結(jié)構(gòu)讓它更像你我今天習(xí)慣閱讀的代碼。

轉(zhuǎn)到BCPL

塊結(jié)構(gòu)語言的語法的下一個(gè)變化是1967年由劍橋大學(xué)的馬丁&middot;理查茲(Martin  Richards)開發(fā)的BCPL語言。在1960年至1967年Algol最初開發(fā)期間,編譯器和系統(tǒng)開發(fā)人員一直在尋找使用機(jī)器語言和匯編語言以外的語言開發(fā)系統(tǒng)應(yīng)用程序(如操作系統(tǒng))的方法。我之所以強(qiáng)調(diào)BCPL,是因?yàn)镃是通過Ken  Thompson開發(fā)的一種名為B的中間語言,作為BCPL的完善和改進(jìn)而開發(fā)的。

Richards將BCPL開發(fā)為一種系統(tǒng)開發(fā)語言,它與匯編語言一樣高效,但具有更高級(jí)別的語法,從而使編碼更簡(jiǎn)單、更高效。這意味著高級(jí)語言(如Algol)的許多特性需要以更有效的方式包含在BCPL等語言中。

實(shí)現(xiàn)這一效率的方法之一是將一個(gè)代碼塊的指定從單詞(begin 和 end)簡(jiǎn)化為符號(hào)。對(duì)于復(fù)合語句和代碼塊,Richards選擇了符號(hào) $( 代表開頭和  )$ 代表結(jié)尾,這些符號(hào)稱為節(jié)括號(hào)。

在BCPL中,如果 $( 和 )$ 與一個(gè)結(jié)構(gòu)體一起使用,比如 if 語句或循環(huán),那么它們就是在限定一個(gè)復(fù)合語句,如果 $(  包括一些聲明,那么它們就是在給一個(gè)塊劃定界限。

例如,下面是BCPL中帶有復(fù)合語句的 if 語句的寫法:

IF A < B      $( LET T = A           A := B; B := T      $)

這是BCPL塊的示例:

GET "LIBHDR" LET START() BE      $( LET A, B, C, SUM = 1, 2, 3, 0           SUM := A + B + C           WRITES("Sum is ")           WRITEN(SUM)      $)

在這里,開始部分方括號(hào)是開始一個(gè)塊,因?yàn)槁暶骶o跟著方括號(hào)。

(和) 在C中成為 { 和 }

大約在1968年或1969年,貝爾實(shí)驗(yàn)室的肯-湯普森和丹尼斯-里奇開始嘗試使用系統(tǒng)編程語言開發(fā)操作系統(tǒng)。湯普森其實(shí)一開始就嘗試使用Fortran進(jìn)行探索,但當(dāng)他意識(shí)到這不可能時(shí),很快就放棄了。他決定要對(duì)BCPL進(jìn)行修改,使其成為一種更符合自己喜好的系統(tǒng)編程語言,于是開發(fā)了B。

B雖然更接近湯普森和里奇想要的系統(tǒng)開發(fā)語言,但仍然不能完全滿足他們的需求,所以里奇開始為新的B開發(fā)另一種語言NB。NB的生命力并不長(zhǎng),最終被一種全新的語言所取代,他們自然而然地稱之為C。如果你對(duì)C語言是如何從BCPL、B和NB發(fā)展而來的感興趣,我鼓勵(lì)你閱讀丹尼斯-里奇的《C語言的歷史》。

如何使用編程中花括號(hào)

湯普森在B中固定并延續(xù)到NB然后在C中固定的許多事物之一就是縮寫運(yùn)算符,這些都是為了讓擴(kuò)展后的語言適應(yīng)當(dāng)時(shí)計(jì)算機(jī)的內(nèi)存限制所必需的。例如,湯普森創(chuàng)造了復(fù)合賦值運(yùn)算符(  += 為例)以及增量(++)和減量(-)運(yùn)算符,作為提高語言效率的方法。此舉是為了提高效率,導(dǎo)致BCPL的其他運(yùn)算符被簡(jiǎn)化&mdash;&mdash;例如,$( 和 $) 被 { 和  } 取代。

“如何使用編程中花括號(hào)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI