Skip to content

Instantly share code, notes, and snippets.

@k33g
Created August 2, 2012 13:27
Show Gist options
  • Save k33g/3237104 to your computer and use it in GitHub Desktop.
Save k33g/3237104 to your computer and use it in GitHub Desktop.
Mini-Book : Coffeescript en 5 minutes

##Coffeescript "tourne"

  • côté client ➤ Navigateur
  • côté serveur & "shell" ➤ NodeJS
  • sous Windows, sous Linux, sous Mac

##Citation

"CoffeeScript is JavaScript, the same language with a different accent"

Patrick Lee (CoffeeScript in Action)

##Coffeescript

  • Simplifie le javascript ...
  • Génère du javascript "propre"
  • ... et "apporte" de nombreux "plus" ...

... qui vont simplifier & rendre le code plus lisible

##Fonctions

addition = (a,b) ->
    a+b

##Coffeescript est compatible avec les "libs" javascript

###Avant :

jQuery $(document).ready()

###Après :

$ -> 
    some()
    init()
    calls()

##Strings - Interpolations

bob =
    firstName : "Bob"
    lastName : "Morane"
    hello : ->
        "Hello !"

console.log "
    Firstname : #{bob.firstName},
    LastName  : #{bob.lastName},
    Method (hello) : #{bob.hello()}
"

... templating plus facile

##Arrays, par exemple "select"

buddies = [
    {name:"Bob", age:30}
    {name:"Sam", age:50}
    { name : "John", age : 20 }
]

#tous les copains de moins de 50 ans
result = (buddy for buddy in buddies when buddy.age < 50)

##Et enfin (surtout) : Les Classes !!!

###Classes

class Human
    constructor : (firstName, lastName) ->
        #fields : @ = this
        @firstName = firstName
        @lastName = lastName
    #method
    hello : ->
        console.log "Hello #{@firstName} #{@lastName}"

Bob = new Human "Bob", "Morane"

###Classes : propriétés & valeurs par défaut en paramètres

class Human
    constructor : (@firstName = "John", @lastName = "Doe") ->
    hello : ->
        console.log "Hello #{@firstName} #{@lastName}"

###Classes : Composition, Association, ...

class Dog
    constructor:(@name)->
class Human
    constructor:(@first, @last, @dog)->

Bob = new Human "Bob", "Morane", new Dog "Wolf"
console.log "Le chien de Bob s'appelle #{Bob.dog.name}"

###Classes : Encapsulation

class Human
    class Hand
        constructor:(@whichOne)->
    constructor:(@first, @last)->
        @leftHand = new Hand "left"
        @rightHand = new Hand "right"

console.log JSON.stringify new Human "Bob", "Morane"

###Static members :

class Human
    @counter : 0 #static property
    constructor : (@firstName, @lastName) ->
        Human.counter += 1
    #static method
    @howMany : ->
        Human.counter

Bob = new Human "Bob", "Morane"
console.log "Human.counter #{Human.howMany()}"

###Héritage : "extends"

class Human
    constructor : (@firstName, @lastName) ->
    hello : ->
        "Hello #{@firstName} #{@lastName}"

class Superhero extends Human
    constructor : (@firstName, @lastName, @name) ->
    hello : ->
        super + " aka #{@name}"

SuperMan = new Superhero "Clark", "Kent", "SuperMan"
console.log SuperMan.hello()

Donc : Vous pouvez faire du JS "orienté Classes", Tout en conservant les possibilités de JS

@mklabs
Copy link

mklabs commented Aug 2, 2012

je sais que tu sais.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment