#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
Donc : Vous pouvez faire du JS "orienté Classes", Tout en conservant les possibilités de JS
Ca marche aussi sans coffee :) juste avec un différent accent.
Question de point de vue :
en JS c'est de l'orienté objet, à la limite de l'orienté "pseudo classe"
en Coffee c'est de l'orienté Class (même si la mécanique derrière est du bricolage)
mais l'aspect sémantique est important
juste avec un différent accent.
Mwé, après c'est pas magique. Ca reste du JS, prototype et compagnie. Quand tu class
et extends
, derrière ca reste du JS.
c'est ce que je disais :
(même si la mécanique derrière est du bricolage)
je sais que tu sais.
Ressources :