等待
不論是哪種程式語言,「等待」都是相當重要的功能,透過等待的方式,可以讓一連串程式延遲進行,也可以搭配迴圈進行一連串同步的動作,在一些較為複雜的程式運算裡,更是時常見到「等待」的身影。
打開 Webduino Blockly 編輯器 ( https://blockly.webduino.io ),展開左側目錄「進階功能」,點選「等待」,可以看到對應的等待積木。
同步與非同步
等待的積木有分兩種,分別是同步與非同步的積木 ( 非同步的積木會標註非同步 ),但究竟什麼是同步?什麼又是非同步呢?所謂的「同步」,就是不同流程工作前進的步伐一致,為了要協調彼此的步伐,會有「等待其他工作完成」的情況發生,因此「等待」也就成為同步程式設計的一個重要特質,同步的程式也常出現在像 Arduino 使用 C 或 C++ 的情況。
「非同步」剛好和同步相反,各個程式流程間並不會互相等待,非同步的程式常見於各種網頁的語法,雖然隨著網頁技術的演進,網頁也逐漸能使用同步的程式,但在目前的過渡階段,仍然會有兩者混用的情況發生。
非同步等待
非同步等待積木可以指定等待的秒數,在秒數到達後就會執行對應的內容。
如果只有一個非同步等待的積木,出來的結果和同步等待是類似的,舉例來說,一開始先使用顯示文字的積木顯示 AAA,然後使用非同步等待積木,等待一秒後顯示 BBB,程式執行後,就會先顯示 AAA,經過一秒之後就顯示 BBB。
但如果有兩個以上的非同步等待積木,將它們都設定為等待一秒,執行後會發現結果不會依序顯示,而是等待一秒之後同時執行,又因為「同時」的緣故,結果就會變成按照程式的排列順序來執行,也就會變成 AAA 顯示完之後,等待一秒出現的結果是 CCC。( 並非 BBB 沒有執行,而是執行的速度太快所以看不到 )
想要使用非同步等待的積木,要做到同步等待的效果,可將非同步等待一層層的擺放在執行的順序內,就可以一秒一秒等待下去進行。
回顧過去的變數、流程和邏輯的教學文章,透過變數、流程、邏輯的互相組合,就能夠做出一個每 0.2 秒自動加總,直到數字為 10 才停止的程式。
非同步重複執行
非同步重複執行,表示指定一個間隔時間,內部的流程就會不斷間隔著執行下去。
舉例來說,可以用 a 與 b 兩個變數,讓 a 一開始等於 0,b 等於 1,透過非同步重複執行每隔 0.2 秒讓 a 加 b,當變數 a 大於等於 10 就讓變數 b 變成 -1,當變數 a 小於等於 0 就讓 b 變成 1,如此一來就會在 0 到 10 的數字區間不斷遞增與遞減。
等待
雖然目前瀏覽器尚未全面支援同步等待的功能,但在 Webduino Blockly 仍然透過背後的程式,讓這個等待的積木,是以同步的方式進行操作。
以剛剛提到非同步等待的例子來說,使用同步等待的積木,就會比較直覺的先顯示 AAA,等待一秒後顯示 BBB,再等待一秒後顯示 CCC。
把同步等待積木搭配無窮迴圈,就能做出每多少秒自動累加數字並顯示的效果,設定迴圈的「直到」,讓迴圈在數字累加到 10 的時候停止。
如果要做到非同步重複執行的動作,同樣只要使用無窮迴圈和同步等待,當變數 a 大於等於 10 的時候讓 b 等於 -1,在變數 a 小於等於 0 的時候讓變數 b 等於 1,就能夠在 0 到 10 的數字不斷遞增與遞減。
注意!使用無窮迴圈一定要搭配「同步等待」功能或停止無窮迴圈的判斷條件,否則迴圈停不下來,可能就會發生瀏覽器資源耗盡當掉的狀況。
聯絡我們
如果對於 Webduino 產品有興趣,歡迎透過下列方式購買:
個人線上購買:https://store.webduino.io/ ( 支援信用卡、超商取貨付款 )
企業&學校採購:來信 [email protected] 或來電 07-3388511。
如果對於這篇教學有任何問題或建議,歡迎透過下列方式聯繫我們:
Email:[email protected] ( 如對於產品有使用上的問題,建議透過 Email 附上照片或影片聯繫 )
Facebook 粉絲團:https://www.facebook.com/webduino/
Facebook 技術討論社團:https://www.facebook.com/groups/webduino/