語句只在理解它們的人那裡擁有意義。
語句捕捉了我們的想法,而想法本身,遠比我們用來描述它的詞彙更為重要。-- Daniel P. Friedman and Daive Thrane Christiansen, The Little Typer
一早我們來到像是咖啡館的地方。說了「像是」,是因為這裡偏暖的燈光、舒服的椅子跟看起來很又舊又安穩的木頭長桌。而且滿是咖啡的味道,但卻看不到有人在煮咖啡。
那是因為許多魔法材料都是灌了大量的咖啡做出來的,讓我們繼續吧。
有看到那邊的魔法自動馬車嗎?上次他們的公會說要修改計算價錢的元件找上我,我覺得這是一起練習的好機會。新的公式是「一開始的 1.25 公里 70 塊錢,接下來每兩百公尺 5 塊。」
那麼如果乘客坐了 5 公里,也就是 5000 公尺,那就可以寫成:
那如果坐了 3500 公尺,那就是:
有注意到上面兩行,只有一開始的數字不同嗎?那就是乘坐的距離,用公尺來表示。但是在乘客真正抵達目的地之前,我們是還不知道總共坐了多少公尺的。我們需要一個東西來代表 「會是個數字,但是現在還不知道是多少」 的東西。我們把它稱之為變數 (variable)。
當 x
改變的時後,底下的計算結果就會跟著改變了。剛剛說了我們用字母來代表還不知道是多少的數字。變數,是實(際)值的抽象。
「但是我們每次都要一直去修改那個 x
啊。」
沒錯,這樣是不夠的。我們需要的是一個能夠輸入數值,然後把結果傳遞回來給我們的計算法術。之後我們只要一直施展同一個法術,但是給他不一樣的輸入就可以了。
我們可以把剛才的計算過程包裝起來,變成一個…函數 (function)。
要讓這個函數計算出想要的結果,我們要把真正的數值,也就是最終搭乘的距離,應用 (apply) 到函數裡,像這樣:
但是剛剛的寫法是數學的寫法,在這個莊園裡,想要做到類似的事,要用這裡約定好的魔法詞彙。在這裡他們稱之為函式 (function)。我們可以把剛才的數學式翻譯成這樣:
function f(x) {
return (x - 1.25 * 1000) / 200 * 5 + 70
}
不過那個 f
跟 x
沒有辦法讓我們快速的看出來這個函式的目的,以及那個變數代表的含義。我們可以用其它的字來代表,例如我們用 calcPrice
來取代 f
,而用 distance
來取代 x
,不過只要對應的起來,用什麼字都可以。
function calcPrice(distance) {
return (distance - 1.25 * 1000) / 200 * 5 + 70
}
那要怎麼讓這個函式運作起來呢?我們要調用 (invoke) 它。也有人用 呼叫 (call) 來表達一樣的行為,而呼叫函式,就跟在數學裡想應用一個函數一樣,在函式名稱的後方加上括號 ()
,並在括號中填入想傳進去的參數,例如 3500
。
calcPrice(3500) //=> 126.25
寫下函式的草紙上空一點點的地方,可以看到像霧的東西緩慢的開始凝結起來,比上次稍微久一些,最終形成一個像是漏斗的東西。
啊啊做好了,我們把這個帶去魔法馬車公會換錢吧,今晚可以吃非常多的烤肉了。而且這樣一來我們的素材跟知識也差不多夠了,總算可以開始來談「找你來的重點」了。
忽然發現,我的手上,都是咖啡的味道。
[to be continue]