iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 7
2
Modern Web

陣列大亂鬥系列 第 7

Day 5:To Do Until The End

前言

其實之前有一段時間很排斥用 while / do...while 這兩種語句,因為對當時剛接觸迴圈的自己來說,while 的用法其實很不直觀,會把宣告式遞增的部分寫在別的地方,這樣的作法對於初學者來說,是相對的不不友善,也因此,有很長一段時間陷入只會使用 for 迴圈的地步。

一直到後來,真的很認真地去審視 for 到底是在做什麼,進一步理解並體會到它的變化型之後,才慢慢可以接受 while 的語句構成跟使用。

接下來,就讓我們來看看 whiledo...while 兩種語句的應用方式吧。


while

Javascript

首先來看 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

接下來就是來看 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

do...while 的語句,如果用白話一點的講法,其實就是把 while 語法中的 do something 搬到判斷式前去實現。這樣可以確保執行序至少會執行一次

Javascript

底下是 do...while 的基本架構:

// javascript

do {
    // do something
} while (判斷式)

// 當判斷式結果為 true 時,迴圈會持續執行

接著再添加上宣告式狀態更新,會得到下方的結果:

// javascript

let i = 0;
do {
    // do something
    i++;
} while (i < 10)

PHP

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 屆鐵人賽系列文


上一篇
Day 4.5:For Something Similar
下一篇
Day 6:Break and Go Next
系列文
陣列大亂鬥30

尚未有邦友留言

立即登入留言