Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Switch case statement in coffee script

I have a few different buttons that are calling the same function and I would like to have them wrapped in a switch statement instead of using a bunch of else if conditions. Any help would be great!!!

events:
"click .red, .blue, #black, #yellow" : "openOverlay"

openOverlay: (e) ->
  e.preventDefault()
  e.stopPropagation()

target = $(e.currentTarget)

# the view should be opened
view = 
  if target.hasClass 'red' then new App.RedView
  else if target.hasClass 'blue' then new App.BlueView
  else if target.is '#black' then new App.BlackView
  else
    null

# Open the view
App.router.overlays.add view: view if view?
like image 862
user992731 Avatar asked Apr 13 '14 17:04

user992731


People also ask

Is there a switch statement in JavaScript?

In addition to if...else , JavaScript has a feature known as a switch statement. switch is a type of conditional statement that will evaluate an expression against multiple possible cases and execute one or more blocks of code based on matching cases.

What type of statement is switch-case?

In computer programming languages, a switch statement is a type of selection control mechanism used to allow the value of a variable or expression to change the control flow of program execution via search and map.


2 Answers

There are two forms of switch in CoffeeScript:

switch expr
    when expr1 then ...
    when expr2 then ...
    ...
    else ...

and:

switch
    when expr1 then ...
    when expr2 then ...
    ...
    else ...

The second form might help you:

view = switch
  when target.hasClass 'red' then new App.RedView
  when target.hasClass 'blue' then new App.BlueView
  when target.is '#black' then new App.BlackView
  else null

You could leave out the else null if undefined is an acceptable value for view. You could also wrap the logic in an (explicit) function:

viewFor = (target) ->
    # There are lots of ways to do this...
    return new App.RedView   if(target.hasClass 'red')
    return new App.BlueView  if(target.hasClass 'blue')
    return new App.BlackView if(target.is '#black')
    null

view = viewFor target

Giving your logic a name (i.e. wrapping it in a function) is often useful for clarifying your code.

like image 198
mu is too short Avatar answered Oct 10 '22 11:10

mu is too short


In addition to the details in the accepted answer, switch statements in CoffeeScript also supports , to provide multiple match results:

switch someVar
    when val3, val4 then ...
    else ...

or (if your statements has multiple lines):

switch someVar
    when val3, val4
        ...
    else
        ...
like image 22
larsmoa Avatar answered Oct 10 '22 10:10

larsmoa