1

分享

【Scratch 教學】分身編號 2 -Scratch分身與執行緒

上一篇介紹了 Scratch 的分身編號,在最後留下了一個問題,這篇我們就來說明這個問題發生的原因。本篇內容同樣取自 Scratch 專家 Cliff Davies 的 "Scratch and its inner workings" 文章的內容。
先來建立兩個變數 『Global』與『 local 』及兩個清單 『Global list』與『  Local list』。其中,變數『local 』是一個區域變數。
順便一提:許多 scratcher 會使用大寫開頭的字來代表全域變數,而小寫開頭的字代表區域變數。
程式如下:兩個變數初始值都是 1,呼叫『建立自己的分身』後,兩個變數再分別加 1。而『當分身產生』時將這兩個變數分別加到對應的清單中。
Scratch Scratch教學 傑夫老師

兩個變數都是在『建立自己的分身』之後才改變 1

執行結果如下:當點擊綠旗開始時,產生了一個分身,兩個變數分別被加到清單中,但清單『Global  list』與『 Local  list』中的第 1 項的數值竟然不同!
Scratch Scratch教學 傑夫老師

清單『Global list』中的第 1 項的值是 2

如果看過上一個單元瞭解了執行緒列表 ,就不難理解『當分身產生』為首的積木串也會是一個執行緒,而當這個執行緒在執行到『建立自己的分身』的時候被建立,並加入到了執行列表中,然而,這個執行緒並沒有馬上開始執行,而是等到了『當綠旗被點擊』為首的程式積木串執行完畢後才執行,這樣造成了兩種變數會有不同的結果。
先來看區域變數『local』,分身獨有的變數『local』是在當『建立自己的分身』執行時跟著執行緒一起被建立,當時的值是 1(就是「繼承」的觀念)。而等到『當分身產生』程式積木串被執行時,加入到清單『Local list』的值是分身獨有的變數『local』的值 1。
但變數『Global』被加入清單時,由於是在『當綠旗被點擊』為首的積木串執行完畢後,『變數 Global 改變 1 』已經被執行了,變成了 2,所以加到清單『Global list』的值是改變後的值 2。
可是!前篇利用全域變數『分身數量』賦予分身編號的程式還有一個『重複 5 次』的迴圈,如果是要等到 5 次重複結束再執行『當分身產生』下的程式積木,那每個分身的編號應該都是 5 啊!
這個理論是不是有問題?還是有什麼沒搞清楚的?待傑夫老師下回說明,Bye now~
#Scratch  #Scratch教學  #傑夫老師 
分類:學習

傑夫(Jeff)老師喜歡研究積木型(block)程式,如:Scratch, App Inventor, micor:bit,除了有一般中小學生的課程,也不定期的會開設Scratch師資培訓班,並且是「Scratch的100個技巧」的共同作者。

評論
上一篇
  • 【Scratch 教學】分身編號 1 -Scratch分身與執行緒
  • 下一篇
  • 【Scratch 教學】分身編號 3 -Scratch分身與執行緒
  • 更多文章
    載入中... 沒有更多了