jashkenas--coffeescript/examples/code.coffee

173 lines
3.1 KiB
CoffeeScript
Raw Normal View History

# Functions:
square: (x) => x * x
sum: (x, y) => x + y
odd: (x) => x % 2 isnt 0
even: (x) => x % 2 is 0
run_loop: =>
fire_events((e) => e.stopPropagation())
listen()
wait()
# Objects:
dense_object_literal: {one: 1, two: 2, three: 3}
spaced_out_multiline_object: {
2009-12-13 23:37:29 +00:00
pi: 3.14159
2009-12-18 02:00:31 +00:00
list: [1, 2, 3, 4]
2009-12-17 13:29:19 +00:00
regex: /match[ing](every|thing|\/)/gi
2009-12-14 15:00:31 +00:00
three: new Idea()
2009-12-13 23:37:29 +00:00
inner_obj: {
freedom: => _.freedom()
2009-12-13 23:37:29 +00:00
}
}
# Arrays:
stooges: [{moe: 45}, {curly: 43}, {larry: 46}]
2009-12-13 23:37:29 +00:00
exponents: [(x) => x, (x) => x * x, (x) => x * x * x]
2009-12-13 23:37:29 +00:00
empty: []
multiline: [
'line one'
'line two'
]
2009-12-13 23:37:29 +00:00
# Conditionals and ternaries.
if submarine.shields_up
full_speed_ahead()
2009-12-16 01:49:24 +00:00
fire_torpedos()
else if submarine.sinking
abandon_ship()
2009-12-13 23:37:29 +00:00
else
run_away()
2009-12-13 23:37:29 +00:00
eldest: if 25 > 21 then liz else marge
2009-12-13 23:37:29 +00:00
2009-12-15 13:53:21 +00:00
decoration: medal_of_honor if war_hero
go_to_sleep() unless coffee
2009-12-13 23:37:29 +00:00
# Returning early:
race: =>
2009-12-13 23:37:29 +00:00
run()
walk()
crawl()
if tired then return sleep()
race()
2009-12-13 22:07:16 +00:00
# Conditional assignment:
good ||= evil
wine &&= cheese
2009-12-14 01:29:44 +00:00
2009-12-14 05:06:08 +00:00
# Nested property access and calls.
((moon.turn(360))).shapes[3].move({x: 45, y: 30}).position['top'].offset('x')
2009-12-14 05:06:08 +00:00
2009-12-15 15:35:17 +00:00
a: b: c: 5
2009-12-15 14:11:27 +00:00
# Embedded JavaScript.
callback(
`function(e) { e.stop(); }`
)
# Try/Catch/Finally/Throw.
2009-12-14 15:00:31 +00:00
try
all_hell_breaks_loose()
dogs_and_cats_living_together()
throw "up"
2009-12-14 15:00:31 +00:00
catch error
print(error)
finally
clean_up()
2009-12-13 22:07:16 +00:00
try all_hell_breaks_loose() catch error then print(error) finally clean_up()
# While loops, break and continue.
while demand > supply
sell()
restock()
while supply > demand then buy()
while true
break if broken
continue if continuing
# Unary operators.
!!true
# Lexical scoping.
v_1: 5
change_a_and_set_b: =>
v_1: 10
v_2: 15
v_2: 20
# Array comprehensions.
supper: food.capitalize() for food in ['toast', 'cheese', 'wine']
drink(bottle) for bottle, i in ['soda', 'wine', 'lemonade'] when even(i)
2009-12-16 03:30:27 +00:00
# Switch statements ("else" serves as a default).
activity: switch day
when "Tuesday" then eat_breakfast()
when "Sunday" then go_to_church()
when "Saturday" then go_to_the_park()
when "Wednesday"
if day is bingo_day
go_to_bingo()
else
eat_breakfast()
go_to_work()
eat_dinner()
else go_to_work()
2009-12-17 01:19:52 +00:00
# Semicolons can optionally be used instead of newlines.
wednesday: => eat_breakfast(); go_to_work(); eat_dinner()
2009-12-17 02:43:26 +00:00
# Array slice literals.
zero_to_nine: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
three_to_six: zero_to_nine[3..6]
2009-12-17 13:23:07 +00:00
2009-12-17 13:26:46 +00:00
# Multiline strings with inner quotes.
story: "Lorem ipsum dolor \"sit\" amet, consectetuer adipiscing elit,
2009-12-17 13:23:07 +00:00
sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna
2009-12-17 14:07:42 +00:00
aliquam erat volutpat. Ut wisi enim ad."
2009-12-21 16:41:45 +00:00
# Inheritance and calling super.
Animal: =>
Animal::move: (meters) =>
alert(this.name + " moved " + meters + "m.")
2009-12-21 16:41:45 +00:00
Snake: (name) => this.name: name
Snake extends Animal
Snake::move: =>
2009-12-21 16:41:45 +00:00
alert('Slithering...')
super(5)
2009-12-21 16:41:45 +00:00
Horse: (name) => this.name: name
Horse extends Animal
Horse::move: =>
2009-12-21 16:41:45 +00:00
alert('Galloping...')
super(45)
2009-12-21 16:41:45 +00:00
sam: new Snake("Sammy the Snake")
tom: new Horse("Tommy the Horse")
sam.move()
tom.move()
2009-12-18 02:00:31 +00:00
# Numbers.
a_googol: 1e100
hex: 0xff0000
negative: -1.0
infinity: Infinity
nan: NaN
2009-12-18 02:21:07 +00:00
# Deleting.
delete secret.identity