学到更多

第3章:定义新方法


在上一章中,我们编写了一个程序来帮助Karel爬上一个简单的壁架:

示例:第一个卡雷尔

即便如此 第一个卡雷尔 上面的程序表明可以执行 turnRight 仅使用Karel的内置命令进行操作,结果程序在概念上并不是特别清晰。在你的程序的心理设计中,卡雷尔在到达壁架顶部时向右转。您必须使用三个转左命令才能这样做的事实令人讨厌。如果你能简单地说,那会简单得多 turnRight() 让卡雷尔明白这个命令。生成的程序不仅更短,更容易编写,而且更容易阅读。

定义新命令

幸运的是,Karel编程语言可以简单地通过包含新的方法定义来定义新命令。每当你有一系列执行某些有用任务的Karel命令时 - 例如向右转 - 你可以定义一个执行该命令序列的新方法。定义新Karel方法的格式与定义的格式大致相同 run 在前面的例子中,这本身就是一个方法定义。典型的方法定义如下所示:

   private void 名称 () {
组成方法主体的命令
   }

在此模式中,name表示您为新方法选择的名称。要完成定义,您所要做的就是在花括号之间的行中提供命令序列。例如,您可以定义 turnRight 如下:

   private void turnRight() {
turnLeft();
turnLeft();
turnLeft();
   }

同样,您可以定义一个新的 turnAround 像这样的方法:

   private void turnAround() {
turnLeft();
turnLeft();
   }

您可以像使用Karel的任何内置命令一样使用新方法的名称。例如,一旦定义了 turnRight ,你可以替换中的三个转左命令 加强卡雷尔 程序只需一次调用即可 turnRight 方法。这是使用的程序的修订实现 turnRight

当然,在定义之间存在一个明显的区别 runturnRight 上述程序中的方法: run 方法标记为 public 相比之下 turnRight ,标记为 private 。这两个名称之间的区别在于公共方法可以从程序外部调用,而私有方法则不能。 run方法需要公开,因为Karel环境需要能够发出run命令才能完成任务。通常,良好的编程习惯是尽可能保持定义私有。

方法代码块

两个大括号之间的一组命令 { } 被称为 代码块 。程序的主体是一个代码块,也是方法的主体。请注意代码块的内容是如何缩进一个选项卡的。这在风格上很重要,因为它使人们很容易知道给定块中的代码行。

您可以根据需要定义任意数量的方法。它们都应该在程序代码块中一个接一个地写入。您无法在另一个方法中定义方法。


下一章