其實之前有一段時間很排斥用 while
/ do...while
這兩種語句,因為對當時剛接觸迴圈的自己來說,while
的用法其實很不直觀,會把宣告式跟遞增的部分寫在別的地方,這樣的作法對於初學者來說,是相對的不不友善,也因此,有很長一段時間陷入只會使用 for
迴圈的地步。
一直到後來,真的很認真地去審視 for
到底是在做什麼,進一步理解並體會到它的變化型之後,才慢慢可以接受 while
的語句構成跟使用。
接下來,就讓我們來看看 while
跟 do...while
兩種語句的應用方式吧。
首先來看 while
的部分,以下是它的基本結構:
// javascript
while (判斷式) {
// do something
}
// 當判斷式結果為 true 時,迴圈會持續執行
看起來結構很簡單,但外表簡單的東西通常內容物都很不簡單。
如果熟悉 for
迴圈的用法的話,就會發現它少了宣告式跟遞增 / 更新兩部分。沒有宣告式,不是會報錯,就是會形成全域變數造成汙染;沒有遞增 / 更新的話,就會導致迴圈無法中斷,形成無限迴圈。
但因為它基本架構中沒有,所以要使用者自己找地方加,這就是我前面說它相對不友善的地方。
不過如果我們換個方式來看它的話,或許會有不同的感覺。以下是 for
迴圈的變化型,不理解的看倌,建議可以先回去看看 Day 4 的內容,裡面有對於 for
迴圈及其變化型的說明。
// javascript
let i = 0;
for (;i < 10;) {
// do something
i++;
}
有沒有覺得很眼熟,眼熟到如果是兩張投影片是可以直接重疊在一起程度。XDD
所以,如果今天我們把關鍵字改一改,會得到底下的結構,這才是 while
該有的真正姿態。
// javascript
let i = 0;
while (i < 10) {
// do something
i++;
}
接下來就是來看 PHP 有關 while
的部分。
老實話說,沒有什麼特別的變化,唯一有可敘述點的是,它有額外的冒號模式可以使用,對於不喜歡大括號的人來說,應該算是一種福音吧?!
它的基本架構如下:
// php 一般模式
<?
while (判斷式) {
// do something
}
?>
// php 冒號模式
<?
while (判斷式):
// do something
endwhile;
?>
// 當判斷式的結果為 true 時,迴圈會持續執行。
在 PHP 的 for
迴圈中也有冒號模式,有興趣的民眾,可以回頭去看一下 Day 4 的內容。
下一步,我們一樣來撰寫 for
的變化型,來加強印象。
// php 一般模式
<?
$i = 0;
for (;$i < 10;) {
// do something
$i++;
}
?>
// php 冒號模式
<?
$j = 0;
for ($j < 10):
// do something
$j++;
endfor;
?>
for
的變化型寫完之後,我們就可以像剛剛在看 JS 時一樣,進行關鍵字的更換,之後就會得到以下的結果:
// php 一般模式
<?
$i = 0;
while ($i < 10) {
// do something
$i++;
}
?>
// php 冒號模式
<?
$j = 0;
while ($j < 10):
// do something
$j++;
endwhile;
?>
還是一句老話,這才是 while
迴圈的真正架構。多看幾眼會發現,其實它好像沒這麼難理理解嘛。XDD
do...while
的語句,如果用白話一點的講法,其實就是把 while
語法中的 do something 搬到判斷式前去實現。這樣可以確保執行序至少會執行一次。
底下是 do...while
的基本架構:
// javascript
do {
// do something
} while (判斷式)
// 當判斷式結果為 true 時,迴圈會持續執行
接著再添加上宣告式跟狀態更新,會得到下方的結果:
// javascript
let i = 0;
do {
// do something
i++;
} while (i < 10)
PHP 中 do...while
的狀況跟 JS 差不多,比較需要注意的是,do...while
是沒有冒號模式的。
基本架構:
// php
<?
do {
// do something
} while (判斷式);
?>
// 當判斷式結果為 true 時,迴圈會持續執行
添加宣告式跟狀態更新:
// php
<?
$i = 0;
do {
// do something
$i++;
} while ($i < 10);
?>
標題 \ 分類 | JS while | JS do...while | PHP while | PHP do...while |
---|---|---|---|---|
撰寫方式 | 1 種 | 1 種 | 2 種 | 1 種 |
最低執行次數 | 0 | 1 | 0 | 1 |
注意事項 | 宣告式跟狀態更新需額外撰寫,架構可以參考 for 迴圈的變化型 |
同左 | 同左 | 同左 |
以上內容將會不同步發佈在 blogger 中:第 11 屆鐵人賽系列文