PBASIC 编程/子程序
外观
我们在循环章节中已经看到,很多时候我们希望多次重复某些代码块。循环依次重复这些代码块,但是如果我们希望在不同的时间重复一个代码块呢?
我们可以使用一个叫做子程序的特殊工具来使代码块可重复。我们可以在程序中的任何地方“调用”我们的子程序,当子程序结束时,控制流将跳回它所在的位置。
当我们把控制流移入子程序时,我们说我们“调用”了子程序,或者我们“进入”了它。同样,当子程序完成后,我们说我们“退出”了子程序,或者我们“从它返回”。
子程序以一个标签开头。我们不使用 GOTO 跳转,而是使用 GOSUB 指令进入子程序。GOSUB 做两件事
- 它跳到子程序的标签,就像一个普通的 GOTO
- 它存储指令指针的旧值,以便在子程序之后,控制流可以返回到它所在的位置。
第二点很重要,因为它允许我们返回到我们之前的位置。
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
MoveForward
或 TurnRight
的子程序可能非常复杂,但任何人都可以阅读上面的代码块,并理解机器人将做什么。