iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
3
Software Development

mostly:functional 從零開始的異世界程式觀 --- 函數式程式設計的試煉系列 第 5

mostly:functional 第四章:還不確定的東西與計算的過程

語句只在理解它們的人那裡擁有意義。
語句捕捉了我們的想法,而想法本身,遠比我們用來描述它的詞彙更為重要。

-- Daniel P. Friedman and Daive Thrane Christiansen, The Little Typer


一早我們來到像是咖啡館的地方。說了「像是」,是因為這裡偏暖的燈光、舒服的椅子跟看起來很又舊又安穩的木頭長桌。而且滿是咖啡的味道,但卻看不到有人在煮咖啡。


那是因為許多魔法材料都是灌了大量的咖啡做出來的,讓我們繼續吧。

有看到那邊的魔法自動馬車嗎?上次他們的公會說要修改計算價錢的元件找上我,我覺得這是一起練習的好機會。新的公式是「一開始的 1.25 公里 70 塊錢,接下來每兩百公尺 5 塊。」

那麼如果乘客坐了 5 公里,也就是 5000 公尺,那就可以寫成:

https://chart.googleapis.com/chart?cht=tx&chl=(5000%20-%201.25%20%5Ctimes%201000)%20%5Cdiv%20200%20%5Ctimes%205%20%2B%2070%20%3D%20163.75

那如果坐了 3500 公尺,那就是:

https://chart.googleapis.com/chart?cht=tx&chl=%20%20(3500%20-%201.25%20%5Ctimes%201000)%20%5Cdiv%20200%20%5Ctimes%205%20%2B%2070%20%3D%20126.25

有注意到上面兩行,只有一開始的數字不同嗎?那就是乘坐的距離,用公尺來表示。但是在乘客真正抵達目的地之前,我們是還不知道總共坐了多少公尺的。我們需要一個東西來代表 「會是個數字,但是現在還不知道是多少」 的東西。我們把它稱之為變數 (variable)

https://chart.googleapis.com/chart?cht=tx&chl=x%20%3D%203500%5C%5C%20%5C%5C%20(x%20-%201.25%20%5Ctimes%201000)%20%5Cdiv%20200%20%5Ctimes%205%20%2B%2070%20%3D%20126.25

x 改變的時後,底下的計算結果就會跟著改變了。剛剛說了我們用字母來代表還不知道是多少的數字。變數,是實(際)值的抽象


「但是我們每次都要一直去修改那個 x 啊。」

沒錯,這樣是不夠的。我們需要的是一個能夠輸入數值,然後把結果傳遞回來給我們的計算法術。之後我們只要一直施展同一個法術,但是給他不一樣的輸入就可以了。

我們可以把剛才的計算過程包裝起來,變成一個…函數 (function)

https://chart.googleapis.com/chart?cht=tx&chl=f(x)%20%3D%20(x%20-%201.25%20*%201000)%20%5Cdiv%20200%20%5Ctimes%205%20%2B%2070

要讓這個函數計算出想要的結果,我們要把真正的數值,也就是最終搭乘的距離,應用 (apply) 到函數裡,像這樣:

https://chart.googleapis.com/chart?cht=tx&chl=f(3500)%20%3D%20126.25


但是剛剛的寫法是數學的寫法,在這個莊園裡,想要做到類似的事,要用這裡約定好的魔法詞彙。在這裡他們稱之為函式 (function)。我們可以把剛才的數學式翻譯成這樣:

function f(x) {
  return (x - 1.25 * 1000) / 200 * 5 + 70
}

不過那個 fx 沒有辦法讓我們快速的看出來這個函式的目的,以及那個變數代表的含義。我們可以用其它的字來代表,例如我們用 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]


上一篇
mostly:functional 第三章:容器與莊園
下一篇
mostly:functional 第五章:文字,是非,與一等公民
系列文
mostly:functional 從零開始的異世界程式觀 --- 函數式程式設計的試煉35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言