全域变数、区域变数
在程序语言里,变数分成“全域变数”以及“区域变数”两种型态,同样的,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 是建立在猫咪角色里,但对于角色的分身而言,却又是各自的区域变数,互不影响,所以猫咪会各自讲出各自往上累加的数值,而小狗因为是全域变数,所以数值会共用。
微信扫码关注
抖音扫码关注