Scratch 中三種常見的重複執行 (Repeated Execution)─迴圈 (Loop)

Scratch 中重複執行的流程結構─迴圈(Loop)有以下三種類型:

  1. 無限迴圈 (Repeated Execuction)─重複執行
    這是 Scratch 中最常見,也是課程中最基礎的重複方式。當我們「未設想」何時要結束程式,多會使用「無限迴圈」,多數個體(如電腦、機器)在處理外界訊息,也是一直不斷的重複接收輸入和反應,而這個無限的大迴圈也就是 Message Loop。如 mBot (Arduino) 中的 loop()。

    上面的程式會重複執行「拍手」,因為沒有任何限制,所以只要有足夠的資源(時間和空間,電力),就可以無限制的重複執行程式。無限迴圈因為不會結束執行,只能重複其內的指令「拍手」,所以 Scratch 的設計是後面無法銜接任何的積木方塊。比較下面的左右兩段程式,左邊的程式無法銜接「歡呼」指令。

    無限迴圈在此有些不便,如未能充份瞭解也容易寫出有 bug 的程式,而不易發覺。以下範例,原先是要拍手10次,但僅拍手1次,為什麼呢?猜猜看。
  2. 有限迴圈 (Bounded Repeated Execution)
    有限次數的重複執行是多數程式語言 (text-based programming language) 的基礎結構,在 Scratch 中反而容易被忽略。Scratch 中省去了使用變數來紀錄次數、遞增變數與條件判斷等複雜控制,我們可以簡單使用「重複幾次」來執行特定次數的指令,如下面程式會執行恰好10次的「拍手」,不多也不少。有確定次數與精確計算的需求,那麼使用「重複幾次」的所造成的結果是可以預期與設想的。

    和前例有 bug 的程式相比,以下全部使用「重複幾次」,對於「拍手」與「歡呼」指令的總次數都是可以預先算出來的,程式的流程規劃相對是比較簡單明確。
  3. 條件迴圈 (Conditional Repeated Execution)
    這是 Scratch 中相對比較進階的概念,當中包含了「重複執行」(Repeated Execution) 與「條件判斷」(Conditional Execution),甚至是變數 (Variables) 的概念。以下,我們以口語方式來瞭解這個結構的意圖。
    如下圖:
  • 現在變數「放暑假」的內容設定為「假」,也就是暑假還沒到來
  • 重複執行「上學」,直到「『放暑假』的內容等於『真』」;(直到世界末日發生,我們都要不停地重複努力生活)
    因為「放暑假」的內容不為「真」,所以還是繼續重複執行「上學」
  • 如果,一等到「放暑假」的內容為「真」,就會滿足「綠色的條件判斷」,那麼這個迴圈就會結束而離開,不再重複執行。而「單車環島」的指令就會執行,環島去吧!

以下,利用「條件迴圈」來達成「無限迴圈」​,但更具有彈性。​​​​​​只要隨時改變變數 stop 的內容,就可以結束離開「重複執行」,有機會「歡呼」。

閱讀完這麼多的內容,為自己執行一個「歡呼」指令吧!