開關
TL; DR: CoffeeScript switch
語句對每種情況使用 when
,對於預設情況使用 else
。他們將 then
用於單行案例,並使用逗號來表示具有單一結果的多個案例。他們故意不允許穿透,因此不需要明確的 break
(因為它總是隱含地存在)。switch 語句可用作可返回的可分配表示式。
CoffeeScript switch
語句是一種控制語句,允許你根據值執行不同的操作。它們就像 if
語句,但是如果 if
語句通常根據 true
或 false
是否採取兩種動作中的一種,則 switch
語句根據任何表示式的值採取任意數量的動作之一 - 字串,數字或任何內容一點都不
CoffeeScript switch
以關鍵字 switch
開頭,然後開啟表示式。然後,每個案例由關鍵字 when
表示,後跟該案例的值。
switch name
when "Alice"
# Code here will run when name is Alice
callAlice()
when "Bob"
# Code here will run when name is Bob
giveBobSandwich()
當每個案例是一行時,還有一個簡寫語法,使用 then
關鍵字而不是換行符:
livesLeft = 2
switch livesLeft
when 3 then fullHealth()
when 2 then healthAt 2
when 1 then healthAt 1
when 0 then playerDie()
你可以根據需要混合和匹配這兩種格式:
livesLeft = 2
switch livesLeft
when 3 then fullHealth()
when 2 then healthAt 2
when 1
healthAt 1
alert "Warning! Health low!"
when 0 then playerDie()
雖然最常見的事情是變數(如上例所示)或 functoin 的結果,但你可以開啟你選擇的任何表示式:
indexOfAnswer = 0
switch indexOfAnswer + 1
when 1 then console.log "The answer is the 1st item"
when 2 then console.log "The answer is the 2nd item"
when 3 then console.log "The answer is the 3rd item"
你也可以讓多個案例導致相同的操作:
switch password
when "password", "123456", "letmein" then console.log "Wrong!"
when "openpoppyseed" then console.log "Close, but no cigar."
when "opensesame" then console.log "You got it!"
一個非常有用的功能是預設或全部捕獲的情況,只有在沒有滿足其他條件時才會執行。CoffeeScript 用 else
關鍵字表示這一點:
switch password
when "password", "123456", "letmein" then console.log "Wrong!"
when "openpoppyseed" then console.log "Close, but no cigar."
when "opensesame" then console.log "You got it!"
else console.log "Not even close..."
(請注意,else
案例不需要 then
關鍵字,因為沒有條件。)
現在這裡是 switch
的所有功能的一個例子!
switch day
when "Mon" then go work
when "Tue" then go relax
when "Thu" then go iceFishing
when "Fri", "Sat"
if day is bingoDay
go bingo
go dancing
when "Sun" then go church
else go work
你還可以將案例的條件設為表示式:
switch fullName
when myFullName() then alert "Doppelgänger detected"
when presidentFirstName + " " + presidentLastName
alert "Get down Mr. president!"
callSecretService()
when "Joey Bonzo" then alert "Joey Bonzo everybody"
CoffeeScript switch
語句也有一個獨特的特性:它們可以像函式一樣返回值。如果將一個變數賦值給 switch
語句,那麼它將被賦值,無論語句返回什麼。
address = switch company
when "Apple" then "One Infinite Loop"
when "Google" then "1600 Amphitheatre Parkway"
when "ACME"
if isReal
"31918 Hayman St"
else
"Unknown desert location"
else lookUpAddress company
(請記住,隱式返回塊中的最後一個語句。你也可以手動使用 return
關鍵字。)
switch 語句也可以在沒有控制表示式的情況下使用,將它們轉換為 if / else 鏈的更清晰的替代方法。
score = 76
grade = switch
when score < 60 then 'F'
when score < 70 then 'D'
when score < 80 then 'C'
when score < 90 then 'B'
else 'A'
(這在功能上等同於 grade = switch true
,因為評估到 true
的第一個案例將匹配。但是,由於每個案例在結尾隱含地都是 break
s,因此只會執行匹配的第一個案例。)