iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 8
2
Modern Web

陣列大亂鬥系列 第 8

Day 6:Break and Go Next

前言

之前講了一些有關迴圈的內容,今天要來討論的,就是如何中斷、跳脫正在運行中的迴圈。

這次要看的是 breakbreak 的做用就跟他的名字一樣,用於中斷執行序、跳出迴圈或是作用區。


Break

Javascript

在 JS 中,它能作用的對象有以下數種:

  1. for
  2. forEach
  3. while
  4. do...while
  5. switch
  6. label

前四個是迴圈系列,沒什麼需要特別說明的,所以先看另外兩個。

switch 其實並不屬於迴圈家族的一份子,但是因為它的語法概念是進入點,所以會需要有語句去告訴它說:「親,做到這邊就好了喲!」,於是便運用上了 break 的特性。

label 有點像是語法標籤或是便利貼的概念,感覺就是把一段程式碼,特別幫它取一個名字,方便進行便操作。因為 break 的特性需要被放置迴圈中才能起作用,所以感覺上,label 就是為了讓 break 可以用在迴圈外的地方而存在的。

在迴圈中使用 break 大概是這樣子:

// javascript

for (let i = 0; i < 10; i++) {
  if (i === 3) {
    break;
  }
  console.log(i);
}
console.log("end");

// > 0
// > 1
// > 2
// > end

它會中斷 / 跳脫迴圈的執行,之後進行後續的語法。

以 JS 來說,基本上它只能跳過一層,所以是多重迴圈的情況下,就會繼續執行外部的迴圈內容:

// javascript

let i = 0;
let k = 0;

for (; i < 10; i++) {
  for (; k < 5; k++) {
    if (k === 3) {
      console.log(`k end`);
      break;
    }
    console.log(`k = ${k}`);
  }
  console.log(`i = ${i}`);
}
console.log(`i end`);

// > k = 0
// > k = 1
// > k = 2
// > k end
// > i = 0
// > k end
// > i = 1
// > k end
// > i = 2
// > k end
// > i = 3
// > k end
// > i = 4
// > k end
// > i = 5
// > k end
// > i = 6
// > k end
// > i = 7
// > k end
// > i = 8
// > k end
// > i = 9
// > i end

從上面的結果可以看出來,在 break 執行之後,雖然不會再運行 k 的內容,但是外層跟 i 相關的並不受影響。

可是 label 的運行就有點不一樣了,因為對 label 來說,你已經有給它命名了,所以你要中斷哪一個就中斷哪一個。

不過要記得,必須把 break 放在 label 的作用域裡面才有效。

// javascript

// 單層 label
helloStr: {
  console.log("Hello");
  break helloStr;
  console.log("the Happy");
}
console.log("World");

// > Hello
// > World
// javascript

// 多層 label
var i = 0,
  j = 8;

checkiandj: while (i < 4) {
  console.log("i: " + i);
  i += 1;

  checkj: while (j > 4) {
    console.log("j: " + j);
    j -= 1;
    if (j % 2 == 0) break checkiandj;
    console.log(j + " is odd.");
  }
  console.log("i = " + i);
  console.log("j = " + j);
}

// > i: 0
// > j: 8
// > 7 is odd.
// > j: 7

PHP

PHP 中 break 的概念其實跟 JS 中差不多,不過它沒有 label 可以用。

所以它的可選參數接的是純數字,用來表示它中斷 / 跳脫幾重迴圈。(由內到外,自身為 1)

// php

// 單層迴圈
<?
    $i = 0;

    while ($i < 10) {
        if($i == 5) {
            break;
        }
        echo $i;

        $i++;
    }
?>

// > 0
// > 1
// > 2
// > 3
// > 4
// php

// 多重迴圈
<?
    $i = 0;
    $k = 8;

    for (; $i < 10; $i++) {
        while ($k > 0) {
            if($k == 5) {
                break 2;
            }
            echo "k:" . $k;
            $k--;
        }
        echo "i:" . $i;
    }

// > k:8
// > k:7
// > k:6
?>

比較

分類 JS PHP
作用 打斷迴圈、作用區 打斷迴圈、作用區
對象 for、forEach、while、do...while、switch、label for、foreach、while、do...while、switch
可選參數 label 值 數字
參數作用 打斷 / 跳出該label作用區 (須將 break 放在 label 宣告區域中) 指定要打斷 / 跳脫幾重迴圈

參考資料

以上內容將會不同步發佈在 blogger 中:第 11 屆鐵人賽系列文


上一篇
Day 5:To Do Until The End
下一篇
Day 7:Continue and From The Beginning
系列文
陣列大亂鬥30

尚未有邦友留言

立即登入留言