跳轉到內容

PBASIC 程式設計/子程式

來自華夏公益教科書

程式碼重用

[編輯 | 編輯原始碼]

我們在迴圈章節中已經看到,很多時候我們希望多次重複某些程式碼塊。迴圈依次重複這些程式碼塊,但是如果我們希望在不同的時間重複一個程式碼塊呢?

我們可以使用一個叫做子程式的特殊工具來使程式碼塊可重複。我們可以在程式中的任何地方“呼叫”我們的子程式,當子程式結束時,控制流將跳回它所在的位置。

當我們把控制流移入子程式時,我們說我們“呼叫”了子程式,或者我們“進入”了它。同樣,當子程式完成後,我們說我們“退出”了子程式,或者我們“從它返回”。

GOSUB 和 RETURN

[編輯 | 編輯原始碼]

子程式以一個標籤開頭。我們不使用 GOTO 跳轉,而是使用 GOSUB 指令進入子程式。GOSUB 做兩件事

  1. 它跳到子程式的標籤,就像一個普通的 GOTO
  2. 它儲存指令指標的舊值,以便在子程式之後,控制流可以返回到它所在的位置。

第二點很重要,因為它允許我們返回到我們之前的位置。

RETURN 指令在子程式的末尾載入指令指標的儲存值。

子程式

[編輯 | 編輯原始碼]

一個基本的子程式看起來像這樣

MySubroutine:
   ... 'Do this in the subroutine
RETURN

可讀性

[編輯 | 編輯原始碼]

使用子程式的一個主要好處是,它們有助於使你的程式碼對其他人更容易閱讀。許多時候,編寫程式的人會非常理解它,但它對其他人來說可能不太明顯,比如團隊成員。例如,如果我們有一個使用 BasicStamp 的機器人,我們希望讓這個機器人以正方形的形狀走動,我們可以使用子程式來輕鬆地做到這一點

GOSUB MoveForward
GOSUB TurnRight
GOSUB MoveForward
GOSUB TurnRight
GOSUB MoveForward
GOSUB TurnRight
GOSUB MoveForward
GOSUB TurnRight

或者,我們可以將我們的子程式與迴圈結合起來,使它更容易

FOR MyCounter = 1 TO 4
   GOSUB MoveForward
   GOSUB TurnRight
NEXT

MoveForwardTurnRight 的子程式可能非常複雜,但任何人都可以閱讀上面的程式碼塊,並理解機器人將做什麼。

華夏公益教科書