[英]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 e2
, until e1 do e2
;在Smalltalk中它們是block1 whileTrue: block2
和block1 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需要四個關鍵字: while
, do
, repeat
和until
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.