Skip to content

Instantly share code, notes, and snippets.

@amirci
Created October 2, 2012 17:41
Show Gist options
  • Save amirci/3821525 to your computer and use it in GitHub Desktop.
Save amirci/3821525 to your computer and use it in GitHub Desktop.
Demo for Coffeescript presentation
# String interpolation
result = "The result is #{3}"
console.log result
movieId = 452
url = "http://movies/#{movieId}"
console.log url
# Functions
square = (x) -> x * x
console.log "The square of 2 is #{square(2)}"
getMovieUrl = (movie, showReviews) -> "http://movies/#{movie}?#{showReviews}"
console.log "To get the movie with id #{1} the url is #{getMovieUrl 1, false}"
# Functions II
getMovieUrl = (id, baseUrl = '/movies') ->
"#{baseUrl}/#{id}"
console.log "The url for movie 1 is #{getMovieUrl 1}"
# Objects
config =
local:
user: 'dev'
pwd: 'dev123'
remote:
user: 'superdev'
pwd: "impossibleToGuess"
console.log "For the config local we have #{config.local.user} and #{config.local['pwd']}"
# Maps and arrays
deploy = ['local', 'remote', 'uat']
fib = [1, 2, 3, 5, 8, 13, 21]
console.log "We choose to deploy on #{deploy[0]}"
first = fib[0..3]
console.log "First 3 Fibonnaci: #{first}"
noLast = fib[0..-2]
console.log "Everything but the last: #{noLast}"
# Destructuring assignment
[firstName, nick, lastName] = ['D\'Arcy', 'Baconator', 'Lussier']
console.log "Had a great time with #{firstName} '#{nick}' #{lastName}"
reviews = [45, 29, 21, 10, 8, 4]
[best, secondBest, theRest...] = reviews
console.log "Best review #{best}"
console.log "Second best review #{secondBest}"
console.log "All the rest #{theRest}"
# if
isJson = true
callIndex = -> console.log 'Index called!'
showMessage = -> console.log 'The request is not JSON....'
if isJson
callIndex()
else
showMessage()
# Unless
unless isJson
showMessage()
# Modifiers
showMessage() unless isJson
callIndex() if isJson
# Switch
critics =
Darcy: "D'Arcy Lussier"
Jay: 'Jay Sherman'
movieReview = (critic, movie) ->
switch critic
when 'Jay'
'It Stinks!'
when 'Darcy'
if movie.match(/Bacon/) then 'Awesome!' else 'It needs more Bacon!'
else
throw new Error('Invalid critic name!')
console.log "Canadian Bacon -> #{critics.Darcy}: #{movieReview 'Darcy', 'Canadian Bacon'}"
console.log "Canadian Bacon -> #{critics.Jay}: #{movieReview 'Jay', 'Canadian Bacon'}"
# Comprehension
negativeNumbers = (-num for num in [1, 2, 3, 4])
console.log negativeNumbers
evens = (x for x in [2..10] by 2)
isInteger = (num) -> num is Math.round(num)
numsThatDivide960 = (num for num in [1..960] when isInteger(960 / num))
console.log numsThatDivide960
deploy = (env) -> console.log "Application deployed to #{env}"
deploy env for env in ['local', 'uat', 'prod']
# Existential Operator
question = paragraph? and not createdDate?
defaultValue = null
defaultValue ?= 5
console.log "Default value #{defaultValue}"
console.log "The question is: #{question}"
currentUser = -> null
console.log "The current user: #{currentUser()?.name}"
console.log "The actual user: #{actualUser?().name}"
# Classes
ajaxCaller = (options) ->
console.log "Calling the URL #{options.url}"
options.success "<h1>Movie form created!</h1>"
class MovieRepository
constructor: (@baseUrl) ->
newMovie: ->
ajaxCaller
url: "#{@baseUrl}/movies/create"
success: (data) -> console.log "Result data of calling: #{data}"
new MovieRepository("http://movies").newMovie()
# Inheritance
class Shape
constructor: (@width) ->
class Square extends Shape
computeArea: -> Math.pow @width, 2
class Circle extends Shape
radius: -> @width / 2
computeArea: -> Math.PI * Math.pow @radius(), 2
showArea = (shape) ->
console.log shape.computeArea()
showArea new Square(2) # 4
showArea new Circle(2) # pi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment