跳转到内容

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 的子程序可能非常复杂,但任何人都可以阅读上面的代码块,并理解机器人将做什么。

华夏公益教科书