开关
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,因此只会执行匹配的第一个案例。)