Jean-Claude Lévy - twitter : @jclevy
4 octobre 2011
Cette présentation est une simple page web HTML5
Modèle disponible sur http://html5rocks.com/
Appuyer sur PgDn pour avancer.
AltR exécute votre code.
Ctrl1 commute le panneau Javascript.

Bodil Stokke
@bodiltv


Inventeur du JavaScript,
une semaine sombre et orageuse de 1995
function plus_two(n) { two = 2; return n + two; }
plus_two(3); // 5 - évidemment, 3 + 2 = 5
two; // 2 - ben alors JS ?with
var foo = 5;
with (obj)
foo; // 5, à moins que obj.foo n'existe2 === "2"; // faux - évidemment un nombre n'est pas une chaine 2 == "2"; // vrai - ben alors JS ?

Inventeur du Lisp, 1958

Co-inventeur du C, 1973

Inventeur du C++, 1983

Inventeur du Python, 1991

Inventeur du Java, 1995

Inventeur du JavaScript, 1995


Inventeur du C#, 2001


Inventeur de Node.JS
server.listen(function(request, response) {
database.open(function(connection) {
connection.query("SELECT * FROM posts", function(cursor) {
cursor.fetchAll(function(posts) {
response.write(posts.forEach(function(post) {
return post.title;
}));
});
});
});
});
// ben alors ?

CoffeeScript
Inventeur du CoffeeScript, 2009



foo = (a, b) ->
c = a + b # l'indentation délimite un bloc - "{" implicite
console.log c # même niveau d'indentation, même bloc
foo 2, 3 # désindente termine le bloc - "}" impliciteif name != "honey badger" care() else eat_cobra()Vous voyez les blocs ?
var sum = function(a, b) {
return a + b;
}sum = (a, b) -> a + b
function(a, b)
devient (a, b) ->function()
devient simplement ->return est implicite: une fonction renvoie toujours la valeur de sa dernière expression.sum = (a, b) -> a + b # vous vous en souvenez ? Ca calcule a + b :) sum(2, 3) # renvoie 5 sum 2, 3 # renvoie 5
connection.close() # appelle la fonction close connection.close # renvoie la fonction, ne l'appelle pas
foo = "bar" # est compilé en: var foo; foo = "bar";
2 == "2" # est compilé en: 2 === "2" # renvoie faux, comme vous vous y attendez 2 is 2 # est équivalent à 2 == "2"

var tweet = {
user: {
name: "bodiltv",
url: "http://bodil.tv/"
},
text: "PONIES RULE SO HARD"
};
tweet =
user:
name: "bodiltv"
url: "http://bodil.tv/"
text: "PONIES RULE SO HARD"
var things_that_rule = [
"robot unicorns",
"honey badgers",
"Lord Inglip"
];
things_that_rule = [
"robot unicorns"
"honey badgers"
"Lord Inglip"
]sum_and_difference = (a, b) -> [ a + b, a - b] [ sum, difference ] = sum_and_difference 5, 2 sum # renvoie 7 difference # revoie 3
if ?if :
if elvis.state == "alive" console.log "Hail to the King!" else console.log "You lie!"
if power_level > 9000 then attack() else retreat()
reign_in_graceland() if name == "Elvis"
whilewhile count > 0 count -= 1
until est un raccourci pour while not:
until power_level > 9000 power_level += 1
if:
power_level++ while power_level <= 9000
if fonctionne comme un opérateur ternaire:
foo = false result = if foo then "foo is truthy" else "foo is falsy" # result est "foo is falsy"
while renvoie un tableau:
counter = 0 list = while counter < 5 counter++ "n" + counter # list is [ 'n1', 'n2', 'n3', 'n4', 'n5' ]
switch revoie quelque chose:
result = switch request.error_code when 200 then "OK" when 301 then "don't live here anymore" when 404 then "not found" when 500 then "i maed u a page... but i eated it" else "unknown error call the police " + request.error_code
if 20 < temperature < 30 venture_outside()
foo = { bar: "bar" }
if foo.bar? then console.log foo.bar
# if (foo.bar != null) { ... }
pokemon = "Snorlax"
console.log "Wild #{pokemon} appeared!"
"Wild Snorlax appeared!"
pokemon = "Snorlax"
console.log "Wild #{pokemon.toUpperCase()} appeared!"
"Wild SNORLAX appeared!"
blurb = "I don't always drink beer,
but when I do,
I prefer Dos Equis."
console.log blurb
"I don't always drink beer, but when I do, I prefer Dos Equis."
html = """
<div class="article">
<h1>Honey Badger</h1>
<p>Honey Badger don't care.</p>
</div>
"""numbers = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] numbers[3..6] # [ 3, 4, 5, 6 ] numbers[7..] # [ 7, 8, 9 ] numbers[..3] # [ 0, 1, 2, 3 ]
numbers = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
numbers[3..6] = [ "foo", "bar" ]
numbers # [ 0, 1, 2, "foo", "bar", 7, 8, 9 ]
for
numbers = [ 1, 2, 3, "many" ]
for number in numbers
console.log "I just counted to #{number}"
numbers = [ 1, 2, 3, "many" ]
console.log "I just counted to #{number}" for number in numbersnumbers = [ 1..5 ] result = number + 1 for number in numbers result # [ 2, 3, 4, 5, 6 ]
Des syntaxes concises pour les opérations map et filter :
( expression for item in array ) ( expression for item in array when condition ) ( expression for key, value of object ) ( expression for key, value of object when condition )
Avez-vous jamais essayé de faire fonctionner Javascript comme un langage orienté objet ?
Shape = function(x, y) {
this.x = x;
this.y = y;
};
Shape.prototype.centre = function() {
return [ this.x, this.y ];
};
Shape.prototype.area = function() {
return 0;
};
var point = new Shape(13, 37);

<script type="text/javascript" src="coffee-script.js"></script> <script type="text/coffeescript" src="my.coffee"></script>
$ npm install coffee-script
var my_cs_module = require("./my_cs_module");$ coffee -c my_script.coffee

Jean-Claude Lévy
jclevy@intentware.net
Twitter : @jclevy