#Coffeescript mieux que Java ?
- by @k33g_org
- www : http://k33g.github.com/
#Coffeescript mieux que Java ?
##Coffeescript ?
par Jeremy Ashkenas sur github.com/jashkenas/coffee-script & coffeescript.org
##Citation
"CoffeeScript is JavaScript, the same language with a different accent"
Patrick Lee (CoffeeScript in Action)
##Coffeescript
... 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
c'est ce que je disais :
(même si la mécanique derrière est du bricolage)
je sais que tu sais.
Mwé, après c'est pas magique. Ca reste du JS, prototype et compagnie. Quand tu
class
etextends
, derrière ca reste du JS.