Functions 函數

什麼是Functions,我們為什麼要用?

相信大家對數學的function(函數)都有一點認識,就是一條代數式。通常裡面有2個未知數,未知數本身會改變但它們的邏輯關係是不變的。

用一個比較簡單的方法來講,我們設定了1個前設方程式,即使我們在別處任意修改,也不會改變這條方程式本身的設定。

Robo編程中的functions就是製造1條函數式,讓我們可以更方便地控制1個以上的blocks。

是什麼意思呢,舉一個例子:我想同時控制光和摩打,那麼我寫1條方程式,將「光+摩打」設為「X」。然後我在編程中需要拉出「X」這個block就可以控制兩樣東西,那麼在處理複雜的編程時將會簡化很多。

這個是micro:bit的function(如果你完全沒有認識請跳落此處直接做例子),它設定了開和關兩個function,然後我們在主編程中只需要用1個簡單的call on和call off就可以控制開關。

雖然Robo Wunderkind的編程方法未必一樣,但背後的意思是一樣的,這裡主要是讓大家明白functions如何幫助簡化編程。

例子:

做一個functions,控制摩打轉動和光顏色。

我們第一步就是設定方程式,然後再將數字輸入方程式。

按下create a function,我們可以自製一個新的block,將上面可以看到我們可以自由加入圓形、六角形及text lable。

圓形和六角形的block相信大家都不會陌生,而text就只是純文字的label而已。為了方便示範,我們這次就添加2個圓形。

這裡要留意一點,其實你可以完全不加的,按照不同情況有不同的用法。我們會在最尾說明。

我們為添加的2個圓形改名為「light」和「speed」,再按確認就會在畫面中出現一個紫色的block。至於為什麼要改這2個名,就是因為我們接下來會以RGB燈和摩打作示範。

除此之外,在下面的工作列你會發一個叫「function 1 (0) (0)」的block,但你暫時還不知道它有何用。

這樣一來我們就寫了一個function出來,就像數學的y=f(x)一樣。接下來,我們就是為這一條function輸入相應的數字。

相信大家到這裡已經掌握了variable的技術,我們很快地寫一個很簡單的編程。我們在另一條code裡設定了2個variable,Speed和Light,然後我們在編程的起始設定兩者speed=50,light=100。

按下來,我們設定1個開關按鈕,然後拉出funtion 1,即是我們本身設好的方程式。

我們把2個variable的數值放進本身的(0)(0)之中,如此一來這條方程式便有了數字的input。

這時你按下播放,應該可以順利地以50的速度轉動摩打和以50G的顏色開燈,你成功地以方程式控制了另一個編程。

到了這裡你一定相當疑惑,為什麼我需要寫得這麼複雜呢?我直接設定數字不是比較快嗎?

這是工作坊裡的其中一個例子,其實大家剛剛學習的只是它的其中一部份(紅圈)而已。

裡面的variable不是單單地設定light=50這麼容易,這只是我們極度簡化的版本。這裡的variable全都是以obstacle sensor收集距離數字然後加以計算出來的。

同時你可以留意一下aviod這個function(綠圈),它就是不添加input的例子(我們剛才說過你可以什麼也不加),它只是將下面的blocks設定成「X」,即是我們一開始分享的micro:bit例子。