在程序语言里,变量分成「全局变量」以及「区域变量」两种型态,同样的,Scratch里的变量,也是分成这种两型态,依据形态的不同,就能够做出不同的应用,这篇文章将会深入介绍Scratch里的全局变量和区域变量。
什么是全局变量?什么是区域变量?
变量,是一种程序执行过程中,暂时存放数据的记忆空间,变量名称就是指向该空间的识别代号,然而变量都有其运作的「范围」(scope),离开这个「范围」,就无法使用这个变量,根据范围的不同,区分为「全局」和「区域」。
- 全局变量:变量作用的范围「涵盖整个程序」,程序里所有的物件都能使用这个变量。
- 区域变量:变量作用的范围仅限于「某个程序」,只有某些物件,或某些函式里,才能使用这个变量,脱离了物件或函式,就无法使用(读取、编辑…等)这个变量。
下图的例子,上方桃红色圆形变数属于全局变数,所有的物件都能够使用这个变数,下方的形状全部都是区域变数,就算绿色三角形变数能让两个物件使用,使用范围仍然不是涵盖所有物件,所以是区域变数。
建立全局或区域变数
Scratch建立变数时,可以选择建立的变数种类:
- 适用于所有角色:全局变数。
- 仅适用当前角色:区域变数。
举例来说,舞台上有一个猫咪(cat),建立了一个全局变数a和一个区域变数b,区域变数b在舞台上的显示,前方会增加「cat:」的识别,表示变数b只能在cat角色里使用。
针对不同角色,使用全局和区域变数
在舞台上新增一只猫咪(cat)和一只小狗(dog)的角色。
点击猫咪角色,新增一个「全局变数a」和一个「区域变数b」。
变数建立完成后,点击切换猫咪和小狗的角色,会发现点击小狗角色时,变数的积木里,没有出现变数b。
由于全局变数a可以让所有角色共同使用,因此如果将猫咪的程序,设定为点击猫咪就将a增加1,将小狗的程序,设定为不断讲出a的数值,就可以在点击猫咪时,小狗就会一直讲出a目前的数值。
接着在小狗角色里,也新增一个「区域变数」b,舞台上就会看见两个变数b,分别是「cat:b」和「dog:b」,两个变数彼此独立,没有任何关系,也不会互相影响。
将猫咪和小狗的角色,使用同样一组程序:「点击绿旗后,设定b为0,点击角色后将b增加1,并讲出b的数值」,完成后点击绿旗,用鼠标点击猫咪和小狗的角色,就会讲出不同的数字(因为各自的区域变数b只会执行各自的指令)。
针对分身,使用全局和区域变数
当在Scratch里替角色建立分身后,「分身」本身也属于一个「新的角色」(新的物件),如果在分身里使用「区域变数」,则这个区域变数就「只会作用在这个分身的程序里」。
开启上面示例的程序)进行修改,将猫咪的程序改成下图的样子(点击绿旗后,产生三个分身,隐藏本尊,点击分身时,将「区域变数b」增加1并且显示b)。
将小狗的程序修改成下图的样子(点击绿旗后,产生三个分身,隐藏本尊,点击分身时,将「全局变数a」增加1并且显示a)
完成后,点击绿旗,用鼠标点击猫咪和小狗,会发现虽然区域变数b是建立在猫咪角色里,但对于角色的分身而言,却又是各自的区域变数,互不影响,所以猫咪会各自讲出各自往上累加的数值,而小狗因为是全局变数,所以数值会共享。