友情提示:380元/半年,儿童学编程,就上码丁实验室。
在Scratch中,我们在每次定义变量时,都会出现一个选择项,是“适用于所有角色”,还是“仅适用于当前角色”。初学者常常对这个比较迷惑,不知道应该选择哪一个。即使是熟练的用户,也有很多时候在这个地方出错。
那么这两个选项的区别在哪里呢?
从软件开发的角度来说,能够被所有角色(包括舞台脚本)访问的是全局变量,只能被一个角色访问的是局部变量。
再深入一下,这个变量的作用范围还涉及到克隆的问题。因为在一个角色生成克隆体的时候,定义在角色中的局部变量同时也会在克隆体中产生变量。需要注意的是,此时每个克隆体都会有一套相同名称的独立变量。
//////////
下面我们从几个方面讨论这个范围的问题
这里的可访问性是指能够读取和修改变量,并在设计程序中看到变量。
对于全局变量,在舞台及所有的角色中,均可以看到并访问它。
但对于局部变量,只在定义它的角色中及角色生成的克隆体中访问。舞台中的脚本及其它角色中的脚本是无法访问的。
在Scratch中,提供了一个读取其它角色变量及基本信息的方式。也就是这块积木。
假设我们定义了一个球的角色,其中有一个局部变量ballX.在其它的角色中,就可以使用这个积木,得到ballX变量的值。
这里只能够读到变量的值,而不能对变量的值进行修改。
而且如果BALL角色生成了克隆体,这个积木只能得到原始角色的变量值,而不能得到每个克隆体中的变量值。
在舞台脚本中使用的变量只能是全局变量。所以我们一般要避免在舞台上使用过多的变量,因为这些变量会出现在所有的角色中。
在使用变量时,必须要区分清楚是全局还是局部变量。如何区分呢。语言中提供了一个方法。就是在使用变量的积木时,会在下拉列表中将全局变量放在一起,将局部变量放在一起。
例如下图中所示,其中N,N1是全局变量,而横线下的catX,catY都是局部变量。
//////////
错误选择范围会带来的后果
如果我们错误地选择了变量的范围,会带来什么样的错误呢?
1 如果误将全局变量选择为局部变量,这时其它的角色就无法访问这个变量。一般这种错误在设计过程中就能够发现。
2 如果误将局部变量选择为全局变量,这时任何位置都能够访问它。如果不生成克隆体,则访问局部变量和访问全局变量没有什么区别。如果一旦生成了克隆体就会出现问题,本来是希望每个克隆体中的变量具有不同的值,但全局变量会使所有的克隆体都有同一个值,这也是很多时候让初学者困惑的一个问题。
总结
1 全局变量和局部变量是包括Scratch在内的很多程序设计语言中的重要概念。作为程序设计者,必须清晰地掌握这个概念。
2 Scratch提供的访问及区分功能并不十分完善,我们一方面期待新版本中的改进,另一方面,也可以在当前的版本中使用其它方法来替代。