์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

#!syntax coffeescript
alert "Hello, World!" # alert ๋ฐฉ์‹
document.write "Hello, world!" # ๋ฌธ์„œ์— ์“ฐ๋Š” ๋ฐฉ์‹.
console.log "Hello, world!" # ์ฝ˜์†” ๋ฐฉ์‹

1. ๊ฐœ์š”[ํŽธ์ง‘]

๊ณต์‹ ์‚ฌ์ดํŠธ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผ ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด. npm์˜ coffee-script ๋ชจ๋“ˆ์„ ํ†ตํ•ด Node.js์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Backbone.js๊ณผ underscore.js ๋“ฑ์„ ๋งŒ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ง„์˜์˜ ์œ ๋ช…ํ•œ ๊ฐœ๋ฐœ์ž Jeremy Ashkenas๊ฐ€ ๊ฐœ๋ฐœํ–ˆ๋‹ค.

2. ํŠน์ง•[ํŽธ์ง‘]

  • Assignment
#!syntax coffeescript
number = 42
opposite = true
  • Conditional Assignment
#!syntax coffeescript
number = -42 if opposite
  • Function
coffeescript ๋‚ด ๋ชจ๋“  ํ•จ์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑ๋œ๋‹ค. function keyword๋Š” ๋” ์ด์ƒ ํ•„์š”๊ฐ€ ์—†๋‹ค.
#!syntax coffeescript
square = (x) -> x * x
cube = (x) -> x * square x

sqrt = (x) -> Math.sqrt(x)
cbrt = (x) ->
  v = x
  for i in [1...32]
    v *= v
    v *= v
    v *= x
    v = sqrt sqrt v
    x = sqrt sqrt x
  sqrt sqrt v

alert cbrt 8
alert Math.cbrt 8
  • Object
YAML์™€ ๋น„์Šทํ•œ ๋ชจ์–‘์„ ๋„๊ณ  ์žˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜๋œ ๋ชจ๋“  ์ฝ”๋“œ๋Š” {... Object ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
#!syntax coffeescript
some = 
  a: 123
  b: 1232

# m/s^2
gravity =
  sun: 274.0
  jupiter: 24.79
  saturn: 10.445
  uranus: 8.87
  neptune: 11.15
  earth: 99.80665
  venus: 8.872
  mars: 3.7
  mercury: 3.7
  moon: 1.625
  pluto: 0.61

math = ->
  square: (x) -> x * x
  tan: (x) -> Math.tan(x)
  csc: (x) -> 1 / Math.sin(x)
  • Existential Operator
#!syntax coffeescript
alert "์™œ ๋ถˆ๋Ÿฌ" if elvis?

if window.addEventListener?
	document.addEventListener("DOMContentLoaded", ->)
else
	document.attachEvent("onreadystatechange", ->)
  • Array comprehension
#!syntax coffeescript

map = (fn, src) ->
  fn v for v in src

reduce = (fn, src, v) ->
  if !len src
    return v
  if v?
    [v, src...] = src
  v = fn v, w for w in src
  v

filter = (fn, src) ->
  v for v in src when !!fn v

dropwhile = (fn, src) ->
  v for v in src when !fn v

zip = (iters...) ->
  c = Number.MAX_SAFE_INTEGER
  c = u for iter in iters when c > (u = len iter)
  iter[i] for iter in iters for i in [0...c]

len = (x) -> x.length

concepts = [
 "branch"
 "prediction"
 "speculative"
 "execution"
]

alert map len, concepts

3. ์—ฌ๋‹ด[ํŽธ์ง‘]

  • Node.js์—์„œ ์€๊ทผํžˆ ๋งŽ์ด ์“ฐ์ธ๋‹ค. ์ด์œ ๋Š” ์•„๋ฌด๋ž˜๋„ npm์˜ ์ปคํ”ผ์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ ๋•Œ๋ฌธ์ธ๋“ฏ..
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ๋น„ํ•ด ๋ฌธ๋ฒ•์ด ๊ฐ„๊ฒฐํ•˜์—ฌ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์˜ ์‚ฌ๋ž‘์„ ๋ฐ›์•˜์ง€๋งŒ ์„œ์„œํžˆ ์ €๋ฌผ๊ณ  ์žˆ๋Š” ์ค‘์ด๋‹ค. 2016๋…„ Stack Overflow ๊ฐœ๋ฐœ์ž ์„ค๋ฌธ์—์„œ ์ €๋ฌผ๊ณ  ์žˆ๋Š” ๊ธฐ์ˆ  3์œ„๋ฅผ ์ฐจ์ง€ํ–ˆ๋‹ค.[1] ์•„๋ฌด๋ž˜๋„ ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์„ ์ง€์›ํ•˜์ง€ ์•Š๊ณ , ๊ฒฝ์Ÿ์ž์ธ TypeScript๊ฐ€ ์ž˜ ๋‚˜๊ฐ€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ธ๋“ฏ ํ•˜๋‹ค.
[1] ์ฐธ๊ณ ๋กœ 1์œ„๋Š” Windows Phone(...) 2์œ„๋Š” ํ•˜์Šค์ผˆ.