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'existe
2 === "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 ?
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 - "}" implicite
if 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"
while
while 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 numbers
numbers = [ 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