
一、知识点
(一)什么是过程?
程序里有时会有重复的代码。例如,我想画两个三角形,于是写了图7-1所示的这段代码:

图7-1 画两个三角形的程序(左)及运行结果(右)
运行这段代码的确可以画出两个三角形,不过这段代码太长了,而且有很多重复:画第二个三角形时,又把画第一个三角形的代码重复了一遍,只是简单地改动了几个数字。
那么有没有简洁的方案呢?
有,“过程”就是解决这种问题的简洁方案:我们首先把画一个三角形这段代码抽出来,构成一个模块,这个模块就叫“过程”;然后我们只需要调用这个过程两次就可以了。
什么叫“调用”一个过程呢?调用一个过程就是“copy+paste”,就是把这个过程里面的指令复制一份,然后粘贴过来。好理解吧?如果这个过程中还有参数,会复杂一点,我们一会儿仔细介绍。
(二)在Scratch程序里怎样实现过程?
在Scratch里,过程就是积木块,我们通过“自制积木”创建一个新的过程,具体包括以下3个步骤。
第一步:定义过程
首先点击左侧的“自制积木”,然后点击“制作新的积木”,输入给过程起的名字,还有过程需要的参数。
以画三角形为例,我们给新建的过程起名字叫“画三角形”,然后点击“添加输入项 数字或文本”,为这个过程设置了三个形式参数:边长、顶点x
(即顶点的x坐标)和顶点y
(即顶点的y坐标)(见图7-2)。

图7-2 制作新的“画三角形”积木块
第二步:写过程的代码
在写过程代码时,需要注意的是一定要用参数。比如“移动……步”里,我们原来填写的是100,现在得用参数。我们把“定义 画三角形……”那一行里的“边长”拖过来就可以了(见图7-3)。

图7-3 用“画三角形”积木块(左)实现画两个三角形的程序(右)
第三步:调用过程
这一步就简单了。我们直接两次使用这个“画三角形”积木,就画出两个三角形了。你看,这样代码是不是简洁多了?
(三)调用一个过程时到底发生了什么?
我一开始对“调用一个积木块”时到底发生了什么很糊涂。包老师讲“调用过程就是复制过程的代码,再粘贴到调用过程的地方”,我就明白了。
不过我们刚刚定义的“画三角形”这个过程有参数,还得执行一次“参数替换”。具体地说,我们得区分两种参数:
- 形式参数:是定义积木块时,积木块名后括号中的变量名。
- 实际参数:是调用积木块时,积木块名后括号中的表达式。
以“画三角形”程序为例子。左边是积木块“画三角形”的定义,有三个形式参数,分别是“边长”“顶点x
”“顶点y
”。在这个积木块内部,这三个形式参数用起来就像普通变量一样。
右边主程序里两次调用“画三角形”这个积木块。第一次调用时实际参数分别是100、0、0,相当于把“画三角形”这个积木块里面的指令复制一份过来,然后把里面的形式参数“边长”替换成实际参数100,把形式参数“顶点x
”替换成实际参数0,把形式参数“顶点y
”替换成实际参数0。
你试试看,复制、粘贴、参数替换,经过这三步之后,主程序是不是就变成了图7-1里的代码了呢?一模一样啊!