全域變數、區域變數
在程式語言裡,變數分成「全域變數」以及「區域變數」兩種型態,同樣的,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 是建立在貓咪角色裡,但對於角色的分身而言,卻又是各自的區域變數,互不影響,所以貓咪會各自講出各自往上累加的數值,而小狗因為是全域變數,所以數值會共用。
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~