3.1 什么是Blockly語言
2012年6月,Google發布了完全可視化的編程語言Google Blockly,整個界面清晰明了, 你可以如同在玩拼圖一樣用一塊塊圖形對象構建出應用程序。每個圖形對象都是代碼塊,你可以將它們拼接起來,創造出簡單功能,然后將一個個簡單功能組合起來,構建出一個程序。這個程序與我們平時使用的編程語言最大的差別是無需自己編寫代碼,在我們所使用的代碼塊的背后就是已經編寫好了的代碼,而用戶並不需要關心這些,整個過程只需要鼠標的拖曳,不需要鍵盤敲擊。
我們首先通過一個小游戲來了解 Google Blockly,在Blockly Games:Maze這個小游戲中,每個關卡都會提供一個地圖,地圖上有起點和終點,而我們要做的事就是利用每個關卡提供的語句模塊構成一個小程序,使得程序運行起來時起點處的小人能夠順利從起點到達終點。
例如第二關,小人需要經過兩次轉彎才能到達終點,需要注意的是,第一次轉彎后小人必須前進一部分路程才能進行第二次轉彎。

所有組成的模塊如下:

在這個游戲中,我們最需要弄清楚的是每個數據塊執行的順序,以及我們應該如何擺放它才能讓小人順利的到達終點,這就引出了本章的重點,Blockly語言的順序程序設計。
在本章的學習中,我們將學習到幾種順序執行的語句,在這些語句的執行過程中不會發生流程控制的轉移,比如賦值語句,輸入輸出語句。
在講解Blockly語言的順序程序設計之前,讓我們先來對Blockly語言做一個總的概述,Blockly語言總共分為8個板塊。
(1)Logic ,表明數據間的邏輯關系。

(2)Loops 循環控制

(3)Math 數學運算模塊

(4)text 文本塊

(5) list 列表塊

(6) Colour 顏色塊

(7) Variables 變量塊

(8)Functions 函數塊

當學生學習了新的函數或者命令,就可以使用這些Blockly語句塊進行聯系,所有的塊被組織排放在左側的列表中,使用時根據正確的語法和適當的缺口對接就能實現預定的功能。因此,我們可以通過對塊進行適當的組織就能輕松的實現每一個新的想法和創意。
3.2 賦值語句
在c語言的學習中,我們可以知道賦值語句是由賦值表達式加上一個分號構成。而在Blockly語言中,賦值語句是由如下一個語句塊構成:

其中i 指的是一個變量,也可以用其它字母代替,在to 后面緊跟着的是要賦給i 的值。同樣的,這個賦值表達式也可以包括在其它表達式中,例如: 其中i 指的是一個變量,也可以用其它字母代替,在to 后面緊跟着的是要賦給i 的值。同樣的,這個賦值表達式也可以包括在其它表達式中,例如:

if 后面跟着的是一個條件,例如可以是

其作用是當i 大於零時,將一個值賦給i。
3.3 Blockly 語言的輸入與輸出
當計算機被用於和外界交互時才是最有趣的,所謂的輸入與輸出是以計算機主機為主體而言的。
輸入就是將數據從輸入設備帶入計算機 (如鍵盤,磁盤,光盤,掃描儀等)
輸出就是將數據從計算機發送到外部輸出設備(如顯示屏,打印機,磁盤等),輸入輸出有時候並稱為I/O。有許多種類的I/O,包括人機界面,網絡接口,存儲設備接口和自動機器接口。計算機在處理各種輸入輸出上有許多共同點,無論是與一個人,一個文件或其他一些設備進行交互。用戶可以通過只學習如何創建用戶界面來學習重要的I/O技術。
我們先來介紹Blockly語言的輸出語句塊:

它可以根據后面所接的不同的語句塊而輸出不同的數據,例如:

它輸出的是兩個數字的和。

而打印 “hello,my name is zhangwei”則是在屏幕上輸出這一段文本。

而在這一段文本的前面加上另一個數據塊則又是另外一種效果 如:

上面這一行數據模塊則是輸出的這段文本的長度。

例 輸出字符串“Hello World!”

這段程序將會輸出三次Hello World!,在程序中,我們先將步長的值設置為1,當步長的值小於等於3的時候進入repeat循環,在屏幕上輸出Hello World!的字樣然后將步長的值加1加賦值給步長,直到步長的值大於3時將不再進入循環,所以我們不難知道,這段程序將會在屏幕上輸出三次Hello World!的字樣。
介紹完輸出的語句塊之后,讓我們再來介紹輸入的語句塊,Blockly語言的輸入語句塊為

這個輸入語句塊輸入的既能是文本,也可以是數字,通過語句中間的選項可以進行不同的選擇,當我們運行這句語句塊的時候,屏幕同樣會彈出一個文本框,這個時候我們就能在文本框里面輸入我們想帶入計算機的數據,點擊確認后,我們所輸入的數據就將會進入我們所設置的變量里面,下圖便是我們輸入數據的界面:

通過上面簡單的介紹,同學們可能對輸入的理解還不夠深刻,下面讓我們來舉一個具體的例子。
首先,讓我們設置一個變量a,然后再將上面的輸入語句塊連接在設置變量語句塊的后面,點擊運行,在出現的為文本框里面輸入我們想要輸入的數據,點擊確認以后,數據就會被賦值給a了,如果同學們想確認a的值是不是真的是我們所輸入的數據,可以在這段數據塊的下面加上輸出數據塊,將a的數據輸出到屏幕上,這樣我們就能確認a的值了。



3.4 順序結構程序設計舉例
例  從鍵盤輸入一個大寫字母,要求改用小寫字母輸出。
看到這個題目,同學們首先想到的是什么呢?在前面介紹的幾個Blockly模板中大家會首先想到哪個語句塊?或許記憶力好的同學已經想到,在我們介紹到的Text板塊中就有一個語句塊是用來轉換大小寫的:

這個語句塊使用起來相當簡單,只需要將你需要轉換的文本連接在此語句塊的后面就行了,此語句塊同樣能根據需求不同產生三種不同的效果,我們所做的只要改變語句塊中的選項罷了。
既然已經找到了這個問題所需要的核心語句,那么后面的問題就簡單了,不難看出這個題目同時用到了輸入和輸出,所以我們只需要設置一個變量用來存放我們所輸入的數據,然后將輸入的數據轉化成小寫並輸出,這個問題就解決了。所組成的數據塊如下:

運行結果如下:


例 輸入一個兩位數,如果這兩位相乘大於兩位相加,則輸出“大”這個字。
在同學們第一次見到這個題目時,可能會感到有點手足無措,但其實我們一步步分析就會發現這個題目不過如此,在解決這個問題前,我們首先要搞清楚怎么根據輸入的倆位數分別得到個位數和十位數,如果大家曾經接觸過其它語言,就會知道倆位數 除以10得到的商就是十位上的數字,而得到的余數就是個位上的數字,在弄清楚這個問題以后,這個題目同樣變得不堪一擊了。具體數據塊如下:

在這個組好的數據塊里,我們首先將輸入的倆位數存到ab這個變量里面,然后將計算得出的個位數和十位數分別賦值給b和a,再利用我們前面提到的logic模板里面的if語句塊判斷大小,最后輸出。
運行過程與結果如下:


通過本章的講解,相信大家對Blockly語言的順序程序設計有了大概的了解,也對輸入輸出有了清晰的認識,語言的順序程序設計在同學們今后的語言學習中起着相當重要的作用,希望能引起大家的重視。
課后練習
1、對兩個整數變量的值進行互換。
2、如果是做單項選擇題,請根據給定的選項,輸出對應的結果。
舉例:
總共有4個字符。A,B,C,D。
你給出字符A,輸出:你選擇了A
你給出字符B,輸出:你選擇了B
你給出字符C,輸出:你選擇了C
你給出字符D,輸出:你選擇了D
3、根據輸入的值,判斷是星期幾。
舉例:
輸入:1
輸出:星期1
知識梳理
