簡體   English   中英

帕斯卡的重復...直到與C的比賽......同時

[英]Pascal's repeat… until vs. C's do… while

在C中有一個while循環和pascal(幾乎)等價是重復直到循環,但兩者之間有一個小的差異,而兩個結構將至少迭代一次並檢查它們是否只需要再次循環最后,在pascal中你編寫了需要滿足的條件來終止循環(REPEAT UNTIL something)在C中你寫入需要滿足的條件來繼續循環(DO WHILE something)。 有沒有理由存在這種差異,還是只是一個武斷的決定?

根本沒有根本的區別,一方面沒有優勢。 它只是“語法糖” - 對語言語法的改變,不會以任何實際方式改變其行為。 有些人發現“重復直到”更容易概念化,而其他人則發現“重復”更容易。

如果,在C中,你遇到的情況是“直到”是你的願望,你總是可以否定這個條件:

do {
    excitingThings();
} while ( !endOfTheWorld() );

在C語句中

 while(some_condition);

可能是“無所事事”循環,或者可能已經脫離“do ... while”循環。

 do {
  statement;
  statement;
  statement;
  lots more statements;
 }

 while(some_condition);

使用不同的關鍵字 - 直到 - 避免了這種可能的錯誤解釋。

這些天來,當每個人都打開所有編譯器警告並注意它們時,不是這樣的問題,不是嗎? 盡管如此,我懷疑大多數資深C程序員都希望 - 在某些時候或其他時候 - 在這種情況下C使用“直到”。

我不知道對歷史的影響,但在我看來,C是比較一致的,在這個意義上if小號需要的條件是真實的代碼運行,因為這樣做while S和do while秒。

Pascal的設計部分源於20世紀60年代的結構化編程工作,包括Edsger Dijkstra的開創性工作A Programming of Programming Dijkstra(同樣認為goto有害的人)發明了用於創建通過構造正確的程序的方法。 這些方法包括用於編寫循環的方法,這些循環關注於循環終止時建立的后置條件 在創建repeat... until形式時,Wirth受到Dijkstra的啟發,在代碼中明確表示終止條件,而不是它的補充。

我一直欽佩像Smalltalk和Icon這樣的語言,它們提供兩種語法形式,從而允許程序員清楚地表達他或她的意圖,而不必依賴於容易錯過的補語操作符。 (在圖標中,表格是while e1 do e2until e1 do e2 ;在Smalltalk中它們是block1 whileTrue: block2block1 whileFalse: block2 。)從我的角度來看,C和Pascal都不是完全構建的正交設計。

這只是一個武斷的決定。 有些語言都有。 QBASIC / VB DO ... LOOP語句支持pretest / posttest和WHILE / UNTIL的所有四種組合。

沒有“決定”會以任何方式將Pascal repeat / until的行為與C do / while循環的行為聯系起來,既不是故意的也不是任意的。 這些只是兩個完全不相關的問題。

只是一些信息。

Road Runner: while(not edge) { run(); } while(not edge) { run(); }

Wily E Coyote: do { run(); } while(not edge); do { run(); } while(not edge);

我總是發現UNTIL循環向后,但這可能只是因為我來自C背景。 有像Perl這樣的現代語言可以提供這兩種語言,但是對於一種語言而言沒有任何特別的優勢

C語法不需要額外的關鍵字。

在C語言中,這兩個關鍵字do ,並while有兩個種類的循環工作。 Pascal需要四個關鍵字: whiledorepeatuntil

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM