iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 6
2

所有動物生來平等,但有些動物比其他動物更為平等。
-- 喬治·歐威爾, 動物農莊


又一天,同樣的咖啡館,我們坐在窗邊。外面的天空看不見太陽,遠方的山頭,有雲的影子。


是非

不像基本數學,在魔法的世界裡,光只有數字是不夠的。我們還要處理文字以及其它的東西。舉例來說,有個叫布林值的傢伙。他在這個 JS 莊園裡長這個樣子:

true
false

不像數字有無限種可能,布林值就只有這兩個了。分別代表正確錯誤

布林值沒有什麼特別的屬性。而兩個布林值間的關係,就是他們可以處理一些組合邏輯判斷,例如 && (and) 是兩者皆為真, || (or) 是兩者任一為真,^ (xor) 是兩者相異(互斥)。

true && false //=> false (並沒有兩個都是 true)
false || true //=> true (其中一個是 ture)
true ^ false //=> true (兩者相異)

一般來說比較少直接寫下 true 或是 false,而是某些魔法操作會回傳布林值,例如比較數字的大小:

3 > 0 // => true

指派給變數

我們還可以拿布林值做什麼呢?我們可以把它指派給變數,接著在之後的段落裡使用。

let age = 20
let isAdult = age >= 18

if(isAdult) {
  // do something
}

當做函式的輸入值

除此之外,我們也可以在呼叫函式時,把布林值當做參數 (argument) 傳進去:

function getDiscountRate(discountOn) {
  if (discountOn) {
    return 0.8
  } else {
    return 1.0
  }
}

let discountRate = getDiscountRate(true) // => 0.8

當做函式的回傳值

最後,我們也可以在函式裡回傳布林值,像這樣:

function isAdult(age) {
  return age >= 18 
}

文字

而文字呢,在魔法的世界裡,我們把它們稱之為字串。寫法是用雙引號或是單引號把許多字母括起來。

"Hello world!"

你可以把它想像成字元的串列,字元就是英文字母、符號等等。事實上在許多古老一點的城市裡,真的是用字元的串列或陣列來做出文字的。當你用字元的容器的觀點來看字串時,會發現這兩種有很多特性跟用法是共通的。

例如字串的屬性,就有這個字串的長度,是不是空字串等等。而字串與其它字串最重要的關係,也是兩個字串可以在一起。

"Hello" + "World" //=> "HelloWorld"

可以做的事

而字串,也可以做到剛才所說的三件事:指派給變數、做為呼叫函式的傳入值,及讓函式回傳字串。

let name = "John" //指派給變數

function greeting(userName) {
  return "Hello! my name is " + userName //做為函式回傳值
}

greeting(name) //當做呼叫函式的參數

一等公民

不管是字串、布林值、數字以及之前提到過的串列(陣列),這些在魔法世界的觀點裡,都是一種資料,也可以稱之為**(實)值**,它們都可以進行剛剛所說的三種操作:

  1. 指派給變數
  2. 當做呼叫函式的參數 (傳入值)
  3. 當做函式的回傳值

符合這些特性的東西,我們會把它們稱之為該國度的一等公民 (first class citizen)

萬物平等…嗎?

終於,我們可以提出那個非常重要的問題了:

「函式,也是一等公民嗎?」

換句話說,我們可以把函式指派給變數、或把函式當做呼叫函式的傳入值,以及讓某個函式回傳函式嗎?

[to be continue]


上一篇
mostly:functional 第四章:還不確定的東西與計算的過程
下一篇
mostly:functional 第六章:王國的改革、觀點的困境
系列文
mostly:functional 從零開始的異世界程式觀 --- 函數式程式設計的試煉35

尚未有邦友留言

立即登入留言