jeudi 28 juin 2012

Guide du développeur au pays du JavaScript

Lors de l'édition 2012 du breizhcamp à Rennes, j'ai donné une conférence sur JavaScript. JavaScript est un langage intéressant car simple à mettre en oeuvre : un éditeur de texte, un navigateur pour tester et c'est tout. Pas de variable d'environnement, pas de compilateur, vous pouvez copier-coller un morceau de JavaScript trouvé sur le web et c'est fini. Enfin c'est la façon de faire de Madame Michu pour son site personnel entretenu le dimanche.

L'objectif de cette présentation était de parler des principes du langage et des pièges principaux pour montrer aux gens que même si JavaScript est un langage simple d'accès, il est nécessaire de l'apprendre si on veut écrire de vraies applications.

En regardant les slides 15 jours après la conférence, je me dis qu'il manque quelques résultats sur les exécutions de code ou explications sur certaines slides. Normalement la présentation sera bientôt en ligne sur l'espace Parleys du Breizhcamp.

En attendant j'intègre les slides depuis slideshare.

4 commentaires:

  1. Salut,

    Tres bonne introduction !

    Une petite erreur / imprecision slide 83 : if (string) n'est pas equivalent à if (string !== "") si string est null ou undefined (ou pas une string).

    RépondreSupprimer
    Réponses
    1. Bien vu.
      Il va falloir que je corrige les slides si je refais la présentation ailleur.

      Merci

      Supprimer
  2. Bonne présentation, t'as raison de mettre en valeur la syntaxe (genre comment créer un Object avec le literal associé), c'est pas simple au début.

    J'ai juste qq remarques (mineures) à soumettre.

    Page 72 :
    Si tu parles de parseInt, vaut mieux donner un exemple avec la base, car y'a le bug des nombres qui commencent par 0.
    parseInt('05') -> 0
    parseInt('05', 10) -> 5

    Page 92:
    A ma connaissance, y'a pas vraiment de débat sur la présence du ;, les règles sont connues.
    Y'a juste un débat interne à l'élite des programmeurs js sur la possiblité de les omettre car ça fait plus joli.
    Pour le programmeur normal (ou qui travaille en équipe), y'a pas de débat, il faut mettre les ;, je me suis arraché les cheveux sur des bugs tordus à cause de mes oublis.

    Sur les closures c'est dommage que tu ne montres pas la capture d'une variable, c'est plus intéressant comme exemple je trouve.
    Ce que je mettrai en avant, c'est qu'en js (versus java), les functions ne sont pas statiques, tu as des "instances" de function, comme tu as des instances d'objets en java (une function est un object comme un autre en js), c'est à dire qu'elles peuvent capturer du state. C'est pratique parce qu'on est pas obligé de systématiquement créer une "classe" avec des propriétés pour avoir du state, ce qui est une erreur commise fréquemment pour les nouveaux venus en js. Le "this" et le "new" sont souvent overdesign en js.

    Exemple "object" overdesign (sans prototype pour faire simple)
    function Splitter(char) {
    this.char = char;
    this.split = function(strToSplit) {
    return strToSplit.split(char);
    }
    }
    var csvSplitter = new Splitter(";");
    var pipeSplitter = new Splitter("|");
    csvSplitter.split("a;b;c");

    Exemple closure :
    function splitter (char) {
    return function(strToSplit) {
    return strToSplit.split(char);
    }
    }
    var csvSplitter = splitter(";");
    var pipeSplitter = splitter("|");
    csvSplitter("a;b;c");

    Le state (char) est conservé dans la fonction que je retourne.
    Et à la différence de java (avec les classes anonymes), c'est que les variables "capturées" ne sont pas final, il est donc possible de les modifier.
    Exemple avec une function qui rend une autre function révocable, c'est à dire que tu peux en interdire l'accès à posteri d'en avoir donné la référence à du code Non Trusted par exemple.

    function revocable(func) {
    return {
    revocableFunc: function() {
    return func && func();
    },
    revoke: function() {
    func = null;
    }
    }
    }

    var myRevocable = recovable(myFunction);
    suscpiciousCode.setCallback(myRevocable.revocableFunc);
    myRevocable.revoke(); // suscpiciousCode ne peut plus appeler myFunction, il aura undefined comme résultat et il n'a aucun moyen de "hacker" ça.

    RépondreSupprimer
    Réponses
    1. Salut,

      pour le parseInt avec la base j'aurai du y penser comme je me suis fait avoir...

      L'aspect joli ou non du point virgule est vraiment subjectif.
      Je préfère les mettre pour le coté délimitation visuelle.

      Pour la revocation de fonction, je n'avais pas encore vu faire la chose. Même si je commence a trouver que des choses de JavaScript me manque en Java, j'ai encore beaucoup de reflexe de développeur Java et n'avait pas envisagé de changer les variables capturées.

      Merci pour l'astuce.

      Supprimer