SlideShare une entreprise Scribd logo
1  sur  25
A la redécouverte de JavaScript

                                                                                              Raphaël Semeteys (raphael.semeteys@atosorigin.com)
                                                                                                                          Consultant Open Source
                                                                                                                                                                                                    Solutions Linux 2008

© 2008 Atos Origin. Document exclusivement réservé à usage commercial. Tout ou partie de ce document ne peut être copié, modifié, diffusé ou annoté sans accord écrit d'Atos Origin ou du client.
Sommaire



» Introduction
» ECMAScript
» Aspects techniques méconnus
» Outils libres disponibles
» Le futur de JavaScript




2   Solutions Linux – 30 janvier 2008
Introduction



» JavaScript
  » Langage de script, orienté objet,
  » Inspiré de Self, sans lien avec Java
» Qui a souffert de la guerre des navigateurs
  » Créé par Netscape, implémenté par Microsoft
  » DOM incompatibles
» Mais grâce au Web 2.0, il a de nouveau le vent en poupe
» Cependant, il reste souvent peu (re)connu
  » Déconsidéré par les développeurs coté serveur
  » Certaines de ses particularités sont ignorées




3   Solutions Linux – 30 janvier 2008
ECMAScript
JavaScript ou ECMAScript ?



» ECMAScript
  » Spécification de l'organisme de standardisation "Ecma International" en 1997
  » ECMAScript (ECMA-262) : correspond à JavaScript Core (hors browser et
    DOM)
  » Composants ECMAScript (ECMA-290) : aucune implémentation connue
  » E4X (ECMA-357) : support de XML
» Les technologies JavaScript et JScript visent désormais l'implémentation du
  standard tout en proposant de nouvelles fonctionnalités pas (encore) incluses dans
  ECMAScript.
» Il existe d'autres implémentations




4   Solutions Linux – 30 janvier 2008
ECMAScript
Implémentations ECMAScript




      Implémentation                    Éditeur     Langage     Licence                Remarques
                                                                            Première implémentation en
     SpiderMonkey                        Mozilla       C      MPL/GPL/LGPL 1995
                                                                            Intégré à Firefox
                                                                            Intégré en 1996 à Internet
     JScript                            Microsoft    C++       Propriétaire
                                                                            Explorer
                                                                            Version utilisable uniquement
     JScript .Net                       Microsoft    C++       Propriétaire
                                                                            coté serveur
                                                                            Existe depuis 1998, intégré à Java
     Rhino                               Mozilla     Java     MPL/GPL/LGPL
                                                                            SE 6 depuis décembre 2006
     Presto                              Opera        ?        Propriétaire A remplacé Elektra en 2003
     ActionScript                        Adobe       C++       Propriétaire Tamarin
     KDE's JavaScript
                                          KDE        C++           GPL       Intégré à Konqueror en 2000
     engine (KJS)
                                                                             Basé sur KJS en 2002 et intégré à
     JavaScriptCore                      Apple       C++           GPL       WebKit
                                                                             Sélectionné pour Android




5   Solutions Linux – 30 janvier 2008
Aspects techniques méconnus
Orientation objet – Objets génériques


» Dans JavaScript tout est objet ou référence à un objet
» Objet génériques
    var MonObjet = new Object;
    MonObjet.attribut = "Attribut";
    MonObjet.fonction = function() {
      return "Fonction";
    }

    MonObjet.attribut;    //retourne "Attribut"
    MonObjet.fonction() ; //retourne "Fonction"

» Peut être vu comme un tableau associatif
    MonObjet['attribut']; //retourne "Attribut" (équivalent à MonObjet.attribut)
    MonObjet['fonction']; : //retourne : function () { return "Fonction"; }
    MonObjet['fonction'](); //retourne "Fonction" (équivalent à MonObjet.fonction())

» Déclaration simplifiée
    var MonObjet = { attribut: 'Attribut' , fonction: function() { return 'Fonction'; } };




6   Solutions Linux – 30 janvier 2008
Aspects techniques méconnus
Orientation objet – Constructeurs


» Constructeur
  » Permet de créer des objets plus complexes
  » Fonction exécutée à la création de l'objet (via l'instruction new)
  » Accessible via la propriété “constructor'
» Objet génériques
    function Voiture(param) {
       this.marque = param;
       this.demarrer = function() {
          return "vroom !";
       }
     }

     var maVoiture = new Voiture("Renault");
     maVoiture.marque;     //contient "Renault"
     maVoiture.demarrer(); //retourne "vroom !"

» this : dans le corps du constructeur, fait référence à l'objet en cours de création




7   Solutions Linux – 30 janvier 2008
Aspects techniques méconnus
Orientation objet – Prototypes (1/2)




» Prototype
  » Objet associé à toute fonction pour référence par les objets créés
  » Accessibe via la propriété “prototype” du constructeur
» Mécanisme de remontée des prototypes
  » Affectation d'une propriété non existante : créée au niveau de l'objet
  » Récupération de la valeur d'une propriété (existante ou pas)
    - si elle existe au niveau de l'objet, sa valeur est retournée
    - sinon, recherche au niveau du prototype de l'objet
    - sinon, recherche au niveau du prototype du prototype
    - etc...
    - sinon, retourne “undefined”




8   Solutions Linux – 30 janvier 2008
Aspects techniques méconnus
Orientation objet – Prototypes (2/2)


» Permet de modifier dynamiquement les objets créés avec le même constructeur
    function Voiture(param) {
      this.marque = param;
    }
    var maVoiture = new Voiture("Relault");

    Chien.prototype.demarrer = function() {
      return "Vroom !";
    }

    maVoiture.demarrer(); //retourne "Vroom !"

» Egalement valable pour les objets prédéfinis de JavaScript
    String.prototype.inverser = function() {
        var inverse = "";
        for (i = this.length - 1; i >= 0; i--) {
           inverse += this.charAt(i);
        }
        return inverse;
    }
    var chaine = "Bonjour !";

    chaine.inverser(); //retourne "! ruojnoB"



9   Solutions Linux – 30 janvier 2008
Aspects techniques méconnus
Orientation objet – Héritage par prototypes

» Héritage par assignation de l'objet père au prototype du fils
  » Dynamique
  » Héritage via la remontée de la chaîne des prototypes
     function Voiture() {
       this.demarrer = function() {
         return ”Vroom !" + this.marque;
       }
     }

     function Sportive(param) {
       this.marque = param;
     }
     Sportive.prototype = new Voiture();
     Sportive.prototype.constructor = Voiture;
     Sportive.prototype.accelerer = function() {
       return “Vroom vroom !!”;
     }

     var maVoiture = new Sportive("Porsche");

     Voiture.prototype.freiner = function() {
       return "Hiiin !";
     }

     //maVoiture.demarrer() retourne : Vroom ! Porsche
     //maVoiture.accelerer() retourne : Vroom vroom !!
     //maVoiture.freiner() retourne : Hiiin !
10    Solutions Linux – 30 janvier 2008
Aspects techniques méconnus
Orientation objet – Héritage par classes



» Apparition de bibliothèques simulant le modèle de classes
  » Extention de l'object “Function” pour y ajouter des méthodes
  » Exemples
     - Librairie de Douglas Crockford (http://javascript.crockford.com/inheritance.html)
     - Base (http://dean.edwards.name/base)
     - Prototype (http://www.prototypejs.org)
» Future évolution d'ECMAScript 4 (et JavaScript 2)
  » Modèle alternatif et optionnel de programmation par classes
  » Introduction des notions de types, classes et interfaces
  » Fait pour faciliter l'adoption par les développeurs
  » Mode strict ou mixte




11   Solutions Linux – 30 janvier 2008
Aspects techniques méconnus
Orientation objet – Encapsulation (1/2)

» Propriétés publiques : les composants (attributs ou méthodes) d'un objet sont, par
  défaut, accessibles à tous ;
     function Objet1() {
       this.attribut = "Attribut public";
     }
     MonObjet1.prototype.fonction = function() {
       return "Fonction publique";
     }
     var MonObjet1 = new Objet1();

     MonObjet1.attribut; //contient "Attribut public"
     MonObjet1.fonction(); //retourne "Fonction publique"

» Propriétés privées : créés dans le constructeur, accessibles seulement via les
  méthodes privées de l'objet lui-même ;
     function Objet2() {
       var attribut = "Attribut privé";
       function fonction() {
          return "Fonction privée";
       }
     }
     var MonObjet2 = new Objet2();

     MonObjet2.attribut; //contient "undefined"
     MonObjet2.fonction(); //retourne l'erreur "MonObjet2.fonction() is not a function"


12   Solutions Linux – 30 janvier 2008
Aspects techniques méconnus
Orientation objet – Encapsulation (2/2)




» Méthodes privilégiées : méthodes pouvant accéder aux composants privés de
  l'objet tout en étant accessibles depuis l'extérieur

     function Objet3() {
       var attribut = "Attribut privé";
       this.fonction = function() {
          return(attribut);
       };
     }

     var MonObjet3 = new Objet3();

     MonObjet3.fonction(); //retourne "Attribut privé"




13   Solutions Linux – 30 janvier 2008
Aspects techniques méconnus
Typage



» JavaScript est dynamiquement typé
» Cela ne veut pas dire qu'il n'est pas typé
» Types primaires
  » Récupérable via l'opérateur typeof
  » number, string, object, boolean, function, undefined
» Autre manière de voir : constructor.name
  » Object : objet générique non typé ;
  » Boolean : booléen (vaut true ou false) ;
  » Number : nombre entier ou décimal ;
  » String : chaîne de caractères ;
  » Array : tableau ;
  » Function : fonction contenant une portion de code ;
  » [NomConstructeur] : type défini par l'utilisateur via une fonction constructeur.



14   Solutions Linux – 30 janvier 2008
Aspects techniques méconnus
Exceptions



» try... catch... finally
     try {
       // Code à tester
       throw "Erreur 1";
     } catch(erreur) {
       // Code à exécuter en cas d'erreur
       // erreur = “Erreur 1”
     } finally {
       // Code à exécuter dans les deux cas
     }



» Possibilité d'empiler les instructions “catch” chez Mozilla
     try { ... }
     catch ( e if e == "InvalidNameException" ) { ... }
     catch ( e if e == "InvalidIdException" ) { ... }
     catch ( e if e == "InvalidEmailException" ) { ... }
     catch ( e ) { ... }




15     Solutions Linux – 30 janvier 2008
Aspects techniques méconnus
Closures


» Contexte d'exécution de fonctions imbriquées
  » fonction contenue accède aux propriétés de la fonction contenante
  » même après l'exécution de la fonction contenante
» Exemple
     function CreerActionVoiture(action) {
       return function() {
         return “La voiture est en train de " + action;
       }
     }

     function Voiture() {
       this.demarrer = CreerActionVoiture("démarrer");
       this.freiner = CreerActionVoiture("freiner");
       this.arreter = CreerActionVoiture("s'arrêter");
     }
     var maVoiture = new Voiture();

     //maVoiture.demarrer() retourne : La voiture est en train de démarrer
     //maVoiture.freiner() retourne : La voiture est en train de freiner
     //maVoiture.arreter() retourne : La voiture est en train de s'arrêter

» Attention : on peut parfois créer des closures sans s'en rendre compte...


16     Solutions Linux – 30 janvier 2008
Aspects techniques méconnus
ECMAScript for XML (E4X)


» Nouveau type d'objet : XML
» Implémenté par Mozilla et Adobe
» Exemple
     var voitures = new XML();

     voitures = <voitures>
       <voiture marque="Renault" modele="Megane"/>
       <voiture marque="Porsche" modele="911"/>
       <voiture marque="Honda" modele="Civic"/>
      </voitures>;

     alert(voitures.voiture.(@marque == "Renault").@modele);
     //Affiche: Megane

     for each(var voiture in voitures..@marque) {
       alert(marque);
     }
     //Affiche :
     //Renault
     //Porsche
     //Honda




17    Solutions Linux – 30 janvier 2008
Outils libres disponibles
Interpréteurs en ligne de commande (shell)

» SpiderMonkey : js (http://developer-stage.mozilla.org/en/docs/Introduction_to_the_JavaScript_shell)
  » Mode interactif
  » Shebang
          #!/usr/bin/js -w
          var toto = "titi";
          print(toto);

» Rhino (http://www.mozilla.org/rhino/shell.html)
  » java org.mozilla.javascript.tools.shell.Main monscript.js
» Kjsembed (http://xmelegance.org/kjsembed)
  » Script shell KDE wrapper de KJS
  » Permet aux applications KDE d'executer du JavaScript
  » Kjscmd : ligne de commande ou console graphique
» Shells interactifs utilisable dans le browser
  » Jash (http://www.billyreisinger.com/jash/)
  » Rainbow9 (http://www.rainbow9.org)




18    Solutions Linux – 30 janvier 2008
Outils libres disponibles
Debuggers
» Rhino (http://www.mozilla.org/rhino/debugger.html)
  » Pour code executé par Rhino (pas browser)
» Venkman (https://addons.mozilla.org/fr/firefox/addon/216)
  » Extension Firefox développée par Mozilla
» Firebug (http://www.getfirebug.com)
  » Extension Firefox développée par Joe Hewitt
  » Debugger mais aussi profiling, logging
  » Outil très complet (HTML, DOM, CSS)




19   Solutions Linux – 30 janvier 2008
Outils libres disponibles
Environnements de développement (1/2)




» cf. http://www.qsos.org

20   Solutions Linux – 30 janvier 2008
Outils libres disponibles
Environnements de développement - Aptana (2/2)


» Aptana Studio est le plus complet
  » Basé sur Eclipse
  » Editeur JS avancé
     - Coloration syntaxique
     - Intellisense
     - Autocompletion
  » Optimisation de code
     - Logging
     - Debugging
     - Profiling
  » Génération JsDoc
  » Navigation dans le code
» Fonctionnalités HTML, CSS




21   Solutions Linux – 30 janvier 2008
Outils libres disponibles
Utilitaires

» JSLint (http://www.jslint.com/lint.html)
  » JavaScript Verifier
  » Plus strict qu'ECMAScript (vision de Crockford)
  » Utilisable online, avec Rhino ou WSH
» JsUnit (http://www.jsunit.net)
  » Tests unitaires
  » Il existe une version serveur (Java, Ant)
» JSCoverage
  » Mesures de couverture de code
  » Instrumentation du code
  » Rapport dans une page HTML
» JsDoc (http://jsdoc.sourceforge.net) et JsToolkit (http://jsdoctoolkit.org)
  » JavaScript Documentation Tools
  » Inspirés de JavaDoc
  » JsToolkit est basé sur JsDoc



22    Solutions Linux – 30 janvier 2008
Le futur de JavaScript
ECMAScript 4




» La version 4 de norme ECMAScript est en cours d'élaboration
» Elle prend en compte certaines fonctionnalités d'ActionScript 3.0
» Nouveautés :
  » Orientation objet : modèle plus classique de classes, interfaces
  » Modularisation du code : espaces de nommage, notion de packages
  » Typage :
    - typage statique optionnel sous forme d'annotations
    - possibilité de mixer des styles de typages
    - mode optionnel de compilation stricte
  » Nombreuses autres nouveautés
  » ...
» cf. http://www.ecmascript.org



23   Solutions Linux – 30 janvier 2008
Le futur de JavaScript
Le projet Tamarin




» Adobe ActionScript Virtual Machine (AVM2) intégrée dans Flash 9
  » Machine virtuelle
  » Compilateur JIT
  » Garbage collector
» Don en Novembre 2006 à Mozilla au sein du projet Tamarin
  » Implémentation compatible avec ECMAScript 4
  » Intégration avec SpiderMonkey (JavaScript 2)
» Courant 2008...




24   Solutions Linux – 30 janvier 2008
Questions / Réponses
                                                                                                                                     raphael.semeteys@atosorigin.com




© 2008 Atos Origin. Document exclusivement réservé à usage commercial. Tout ou partie de ce document ne peut être copié, modifié, diffusé ou annoté sans accord écrit d'Atos Origin ou du client.

Contenu connexe

Tendances

Java 2015 2016_zied_elleuch
Java 2015 2016_zied_elleuchJava 2015 2016_zied_elleuch
Java 2015 2016_zied_elleuchTarek Halloul
 
Java - programmation concurrente
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrenteFranck SIMON
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScripttarkan_
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Microsoft
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Parischristophep21
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummiesMicrosoft
 
Java 8 - interfaces
Java 8 - interfacesJava 8 - interfaces
Java 8 - interfacesFranck SIMON
 
AFUP & PHP @ Supelec
AFUP & PHP @ SupelecAFUP & PHP @ Supelec
AFUP & PHP @ Supelecjulien pauli
 
Programmation des Threads en java
Programmation des Threads en javaProgrammation des Threads en java
Programmation des Threads en javaEzéquiel Tsagué
 
Présentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitPrésentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitIppon
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 
Javascript Json artchitecture
Javascript  Json artchitecture Javascript  Json artchitecture
Javascript Json artchitecture zaghir
 

Tendances (20)

Java 2015 2016_zied_elleuch
Java 2015 2016_zied_elleuchJava 2015 2016_zied_elleuch
Java 2015 2016_zied_elleuch
 
Java - programmation concurrente
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrente
 
Java 9 modules
Java 9    modulesJava 9    modules
Java 9 modules
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScript
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Paris
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummies
 
Multithreading
MultithreadingMultithreading
Multithreading
 
Java 8 - interfaces
Java 8 - interfacesJava 8 - interfaces
Java 8 - interfaces
 
Threads
ThreadsThreads
Threads
 
Django by mrjmad
Django by mrjmadDjango by mrjmad
Django by mrjmad
 
AFUP & PHP @ Supelec
AFUP & PHP @ SupelecAFUP & PHP @ Supelec
AFUP & PHP @ Supelec
 
Programmation des Threads en java
Programmation des Threads en javaProgrammation des Threads en java
Programmation des Threads en java
 
Présentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitPrésentation du retour d'expérience sur Git
Présentation du retour d'expérience sur Git
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Java 8 - lambda
Java 8 - lambdaJava 8 - lambda
Java 8 - lambda
 
Javascript Json artchitecture
Javascript  Json artchitecture Javascript  Json artchitecture
Javascript Json artchitecture
 
JAVA 8
JAVA 8JAVA 8
JAVA 8
 

En vedette

13 formations pour devenir community manager passées à la loupe
13 formations pour devenir community manager passées à la loupe13 formations pour devenir community manager passées à la loupe
13 formations pour devenir community manager passées à la loupeAnne Boulinguez
 
Album souvenir - Open Véronic DiCaire 2012
Album souvenir - Open Véronic DiCaire 2012Album souvenir - Open Véronic DiCaire 2012
Album souvenir - Open Véronic DiCaire 2012FondationLCc
 
Toque de mestre
Toque de mestreToque de mestre
Toque de mestreWesley Sa
 
Carnet photos 2000 2012 (v.2 - juil.-2012) - a5
Carnet photos 2000   2012 (v.2 - juil.-2012) - a5Carnet photos 2000   2012 (v.2 - juil.-2012) - a5
Carnet photos 2000 2012 (v.2 - juil.-2012) - a5Christine Blondeau
 
Logiciel diagramme
Logiciel diagramme Logiciel diagramme
Logiciel diagramme Hicham Amar
 
Les 8 facettes de lattache e- de presse 2.0 - madison communication
Les 8 facettes de lattache e- de presse 2.0 - madison communicationLes 8 facettes de lattache e- de presse 2.0 - madison communication
Les 8 facettes de lattache e- de presse 2.0 - madison communicationAnne Boulinguez
 
Assainissement sous vide
Assainissement sous videAssainissement sous vide
Assainissement sous videHassan EL MADI
 
Collaborative Manufacturing and its Current State_Final
Collaborative Manufacturing and its Current State_FinalCollaborative Manufacturing and its Current State_Final
Collaborative Manufacturing and its Current State_FinalJong Ha Lee
 
RhondaHardestyreference
RhondaHardestyreferenceRhondaHardestyreference
RhondaHardestyreferenceHallie Edlund
 

En vedette (20)

SVT-Presentacion
SVT-PresentacionSVT-Presentacion
SVT-Presentacion
 
Document
DocumentDocument
Document
 
13 formations pour devenir community manager passées à la loupe
13 formations pour devenir community manager passées à la loupe13 formations pour devenir community manager passées à la loupe
13 formations pour devenir community manager passées à la loupe
 
La rutina
La rutinaLa rutina
La rutina
 
Lisez moi
Lisez moiLisez moi
Lisez moi
 
Sample Agreements
Sample AgreementsSample Agreements
Sample Agreements
 
Album souvenir - Open Véronic DiCaire 2012
Album souvenir - Open Véronic DiCaire 2012Album souvenir - Open Véronic DiCaire 2012
Album souvenir - Open Véronic DiCaire 2012
 
Toque de mestre
Toque de mestreToque de mestre
Toque de mestre
 
Carnet photos 2000 2012 (v.2 - juil.-2012) - a5
Carnet photos 2000   2012 (v.2 - juil.-2012) - a5Carnet photos 2000   2012 (v.2 - juil.-2012) - a5
Carnet photos 2000 2012 (v.2 - juil.-2012) - a5
 
Logiciel diagramme
Logiciel diagramme Logiciel diagramme
Logiciel diagramme
 
Les 8 facettes de lattache e- de presse 2.0 - madison communication
Les 8 facettes de lattache e- de presse 2.0 - madison communicationLes 8 facettes de lattache e- de presse 2.0 - madison communication
Les 8 facettes de lattache e- de presse 2.0 - madison communication
 
Assainissement sous vide
Assainissement sous videAssainissement sous vide
Assainissement sous vide
 
Solutions Linux 2008 - ECOS
Solutions Linux 2008 - ECOSSolutions Linux 2008 - ECOS
Solutions Linux 2008 - ECOS
 
Solution Linux 2009 - SVG
Solution Linux 2009 - SVGSolution Linux 2009 - SVG
Solution Linux 2009 - SVG
 
Solutions Linux 2007 - QSOS
Solutions Linux 2007 - QSOSSolutions Linux 2007 - QSOS
Solutions Linux 2007 - QSOS
 
Solution Linux 2009 - QSOS
Solution Linux 2009 - QSOSSolution Linux 2009 - QSOS
Solution Linux 2009 - QSOS
 
La drogadiccion
La drogadiccionLa drogadiccion
La drogadiccion
 
Proceso del software
Proceso del softwareProceso del software
Proceso del software
 
Collaborative Manufacturing and its Current State_Final
Collaborative Manufacturing and its Current State_FinalCollaborative Manufacturing and its Current State_Final
Collaborative Manufacturing and its Current State_Final
 
RhondaHardestyreference
RhondaHardestyreferenceRhondaHardestyreference
RhondaHardestyreference
 

Similaire à Solutions Linux 2008 - JavaScript

Rouabhi algiers meetup
Rouabhi algiers meetupRouabhi algiers meetup
Rouabhi algiers meetupSamir Rouabhi
 
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs WebUne visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs WebFrédéric Harper
 
Annotations pour les Geeks
Annotations pour les GeeksAnnotations pour les Geeks
Annotations pour les Geeksjviet
 
Etat de l'art Server-Side JavaScript - JS Geneve
Etat de l'art Server-Side JavaScript - JS GeneveEtat de l'art Server-Side JavaScript - JS Geneve
Etat de l'art Server-Side JavaScript - JS GeneveAlexandre Morgaut
 
Outils de construction pour la recherche
Outils de construction pour la rechercheOutils de construction pour la recherche
Outils de construction pour la rechercheJohan Moreau
 
2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturiteRémi Alvado
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsJulien Wittouck
 
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOlivier DASINI
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation MavenArnaud Héritier
 
Pyconfr2018 deploy des application python dans un cluster open shift
Pyconfr2018 deploy des application python dans un cluster open shiftPyconfr2018 deploy des application python dans un cluster open shift
Pyconfr2018 deploy des application python dans un cluster open shiftArthur Lutz
 
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...Arthur Lutz
 
Retour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesRetour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesVincent Composieux
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hoodsvuillet
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache MavenArnaud Héritier
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache MavenArnaud Héritier
 

Similaire à Solutions Linux 2008 - JavaScript (20)

Rouabhi algiers meetup
Rouabhi algiers meetupRouabhi algiers meetup
Rouabhi algiers meetup
 
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs WebUne visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
 
The Future of Javascript
The Future of JavascriptThe Future of Javascript
The Future of Javascript
 
The future of JavaScript
The future of JavaScriptThe future of JavaScript
The future of JavaScript
 
Plugins Xcode
Plugins XcodePlugins Xcode
Plugins Xcode
 
Annotations pour les Geeks
Annotations pour les GeeksAnnotations pour les Geeks
Annotations pour les Geeks
 
Etat de l'art Server-Side JavaScript - JS Geneve
Etat de l'art Server-Side JavaScript - JS GeneveEtat de l'art Server-Side JavaScript - JS Geneve
Etat de l'art Server-Side JavaScript - JS Geneve
 
Outils de construction pour la recherche
Outils de construction pour la rechercheOutils de construction pour la recherche
Outils de construction pour la recherche
 
2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturite
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
 
Pyconfr2018 deploy des application python dans un cluster open shift
Pyconfr2018 deploy des application python dans un cluster open shiftPyconfr2018 deploy des application python dans un cluster open shift
Pyconfr2018 deploy des application python dans un cluster open shift
 
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
 
Introduction webextensions
Introduction webextensionsIntroduction webextensions
Introduction webextensions
 
Retour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesRetour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, Kubernetes
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 

Plus de Raphaël Semeteys

I LOVE Tech 2024 - Unlocking AI: Navigating Open Source vs. Commercial Frontiers
I LOVE Tech 2024 - Unlocking AI:Navigating Open Source vs. Commercial FrontiersI LOVE Tech 2024 - Unlocking AI:Navigating Open Source vs. Commercial Frontiers
I LOVE Tech 2024 - Unlocking AI: Navigating Open Source vs. Commercial FrontiersRaphaël Semeteys
 
SOOCon24 - From OpenAI to Opensource AI: Navigating Between Commercial Owners...
SOOCon24 - From OpenAI to Opensource AI: Navigating Between Commercial Owners...SOOCon24 - From OpenAI to Opensource AI: Navigating Between Commercial Owners...
SOOCon24 - From OpenAI to Opensource AI: Navigating Between Commercial Owners...Raphaël Semeteys
 
OSX 2023 - Vers une re-decentralisation d’Internet : panorama des technos et ...
OSX 2023 - Vers une re-decentralisation d’Internet : panorama des technos et ...OSX 2023 - Vers une re-decentralisation d’Internet : panorama des technos et ...
OSX 2023 - Vers une re-decentralisation d’Internet : panorama des technos et ...Raphaël Semeteys
 
Web2day 2023 - Internet (re)décentralisé ? Architecture du Web3
Web2day 2023 - Internet (re)décentralisé ? Architecture du Web3Web2day 2023 - Internet (re)décentralisé ? Architecture du Web3
Web2day 2023 - Internet (re)décentralisé ? Architecture du Web3Raphaël Semeteys
 
TADx 2023 - 1 plateforme à convevoir, 2 architectes : 3 possibilités ?
TADx 2023 - 1 plateforme à convevoir, 2 architectes : 3 possibilités ?TADx 2023 - 1 plateforme à convevoir, 2 architectes : 3 possibilités ?
TADx 2023 - 1 plateforme à convevoir, 2 architectes : 3 possibilités ?Raphaël Semeteys
 
SnowcampIO 2023 - 1 plateforme à concevoir + 2 architectes = 3 solutions
SnowcampIO 2023 - 1 plateforme à concevoir + 2 architectes = 3 solutionsSnowcampIO 2023 - 1 plateforme à concevoir + 2 architectes = 3 solutions
SnowcampIO 2023 - 1 plateforme à concevoir + 2 architectes = 3 solutionsRaphaël Semeteys
 
Solution Linux 2009 - JavaScript
Solution Linux 2009 - JavaScriptSolution Linux 2009 - JavaScript
Solution Linux 2009 - JavaScriptRaphaël Semeteys
 
Solutions Linux 2008 - Poste de travail Linux
Solutions Linux 2008 - Poste de travail LinuxSolutions Linux 2008 - Poste de travail Linux
Solutions Linux 2008 - Poste de travail LinuxRaphaël Semeteys
 

Plus de Raphaël Semeteys (9)

I LOVE Tech 2024 - Unlocking AI: Navigating Open Source vs. Commercial Frontiers
I LOVE Tech 2024 - Unlocking AI:Navigating Open Source vs. Commercial FrontiersI LOVE Tech 2024 - Unlocking AI:Navigating Open Source vs. Commercial Frontiers
I LOVE Tech 2024 - Unlocking AI: Navigating Open Source vs. Commercial Frontiers
 
SOOCon24 - From OpenAI to Opensource AI: Navigating Between Commercial Owners...
SOOCon24 - From OpenAI to Opensource AI: Navigating Between Commercial Owners...SOOCon24 - From OpenAI to Opensource AI: Navigating Between Commercial Owners...
SOOCon24 - From OpenAI to Opensource AI: Navigating Between Commercial Owners...
 
OSX 2023 - Vers une re-decentralisation d’Internet : panorama des technos et ...
OSX 2023 - Vers une re-decentralisation d’Internet : panorama des technos et ...OSX 2023 - Vers une re-decentralisation d’Internet : panorama des technos et ...
OSX 2023 - Vers une re-decentralisation d’Internet : panorama des technos et ...
 
Web2day 2023 - Internet (re)décentralisé ? Architecture du Web3
Web2day 2023 - Internet (re)décentralisé ? Architecture du Web3Web2day 2023 - Internet (re)décentralisé ? Architecture du Web3
Web2day 2023 - Internet (re)décentralisé ? Architecture du Web3
 
Nantes JUG 2023 - Web3
Nantes JUG 2023 - Web3Nantes JUG 2023 - Web3
Nantes JUG 2023 - Web3
 
TADx 2023 - 1 plateforme à convevoir, 2 architectes : 3 possibilités ?
TADx 2023 - 1 plateforme à convevoir, 2 architectes : 3 possibilités ?TADx 2023 - 1 plateforme à convevoir, 2 architectes : 3 possibilités ?
TADx 2023 - 1 plateforme à convevoir, 2 architectes : 3 possibilités ?
 
SnowcampIO 2023 - 1 plateforme à concevoir + 2 architectes = 3 solutions
SnowcampIO 2023 - 1 plateforme à concevoir + 2 architectes = 3 solutionsSnowcampIO 2023 - 1 plateforme à concevoir + 2 architectes = 3 solutions
SnowcampIO 2023 - 1 plateforme à concevoir + 2 architectes = 3 solutions
 
Solution Linux 2009 - JavaScript
Solution Linux 2009 - JavaScriptSolution Linux 2009 - JavaScript
Solution Linux 2009 - JavaScript
 
Solutions Linux 2008 - Poste de travail Linux
Solutions Linux 2008 - Poste de travail LinuxSolutions Linux 2008 - Poste de travail Linux
Solutions Linux 2008 - Poste de travail Linux
 

Solutions Linux 2008 - JavaScript

  • 1. A la redécouverte de JavaScript Raphaël Semeteys (raphael.semeteys@atosorigin.com) Consultant Open Source Solutions Linux 2008 © 2008 Atos Origin. Document exclusivement réservé à usage commercial. Tout ou partie de ce document ne peut être copié, modifié, diffusé ou annoté sans accord écrit d'Atos Origin ou du client.
  • 2. Sommaire » Introduction » ECMAScript » Aspects techniques méconnus » Outils libres disponibles » Le futur de JavaScript 2 Solutions Linux – 30 janvier 2008
  • 3. Introduction » JavaScript » Langage de script, orienté objet, » Inspiré de Self, sans lien avec Java » Qui a souffert de la guerre des navigateurs » Créé par Netscape, implémenté par Microsoft » DOM incompatibles » Mais grâce au Web 2.0, il a de nouveau le vent en poupe » Cependant, il reste souvent peu (re)connu » Déconsidéré par les développeurs coté serveur » Certaines de ses particularités sont ignorées 3 Solutions Linux – 30 janvier 2008
  • 4. ECMAScript JavaScript ou ECMAScript ? » ECMAScript » Spécification de l'organisme de standardisation "Ecma International" en 1997 » ECMAScript (ECMA-262) : correspond à JavaScript Core (hors browser et DOM) » Composants ECMAScript (ECMA-290) : aucune implémentation connue » E4X (ECMA-357) : support de XML » Les technologies JavaScript et JScript visent désormais l'implémentation du standard tout en proposant de nouvelles fonctionnalités pas (encore) incluses dans ECMAScript. » Il existe d'autres implémentations 4 Solutions Linux – 30 janvier 2008
  • 5. ECMAScript Implémentations ECMAScript Implémentation Éditeur Langage Licence Remarques Première implémentation en SpiderMonkey Mozilla C MPL/GPL/LGPL 1995 Intégré à Firefox Intégré en 1996 à Internet JScript Microsoft C++ Propriétaire Explorer Version utilisable uniquement JScript .Net Microsoft C++ Propriétaire coté serveur Existe depuis 1998, intégré à Java Rhino Mozilla Java MPL/GPL/LGPL SE 6 depuis décembre 2006 Presto Opera ? Propriétaire A remplacé Elektra en 2003 ActionScript Adobe C++ Propriétaire Tamarin KDE's JavaScript KDE C++ GPL Intégré à Konqueror en 2000 engine (KJS) Basé sur KJS en 2002 et intégré à JavaScriptCore Apple C++ GPL WebKit Sélectionné pour Android 5 Solutions Linux – 30 janvier 2008
  • 6. Aspects techniques méconnus Orientation objet – Objets génériques » Dans JavaScript tout est objet ou référence à un objet » Objet génériques var MonObjet = new Object; MonObjet.attribut = "Attribut"; MonObjet.fonction = function() { return "Fonction"; } MonObjet.attribut; //retourne "Attribut" MonObjet.fonction() ; //retourne "Fonction" » Peut être vu comme un tableau associatif MonObjet['attribut']; //retourne "Attribut" (équivalent à MonObjet.attribut) MonObjet['fonction']; : //retourne : function () { return "Fonction"; } MonObjet['fonction'](); //retourne "Fonction" (équivalent à MonObjet.fonction()) » Déclaration simplifiée var MonObjet = { attribut: 'Attribut' , fonction: function() { return 'Fonction'; } }; 6 Solutions Linux – 30 janvier 2008
  • 7. Aspects techniques méconnus Orientation objet – Constructeurs » Constructeur » Permet de créer des objets plus complexes » Fonction exécutée à la création de l'objet (via l'instruction new) » Accessible via la propriété “constructor' » Objet génériques function Voiture(param) { this.marque = param; this.demarrer = function() { return "vroom !"; } } var maVoiture = new Voiture("Renault"); maVoiture.marque; //contient "Renault" maVoiture.demarrer(); //retourne "vroom !" » this : dans le corps du constructeur, fait référence à l'objet en cours de création 7 Solutions Linux – 30 janvier 2008
  • 8. Aspects techniques méconnus Orientation objet – Prototypes (1/2) » Prototype » Objet associé à toute fonction pour référence par les objets créés » Accessibe via la propriété “prototype” du constructeur » Mécanisme de remontée des prototypes » Affectation d'une propriété non existante : créée au niveau de l'objet » Récupération de la valeur d'une propriété (existante ou pas) - si elle existe au niveau de l'objet, sa valeur est retournée - sinon, recherche au niveau du prototype de l'objet - sinon, recherche au niveau du prototype du prototype - etc... - sinon, retourne “undefined” 8 Solutions Linux – 30 janvier 2008
  • 9. Aspects techniques méconnus Orientation objet – Prototypes (2/2) » Permet de modifier dynamiquement les objets créés avec le même constructeur function Voiture(param) { this.marque = param; } var maVoiture = new Voiture("Relault"); Chien.prototype.demarrer = function() { return "Vroom !"; } maVoiture.demarrer(); //retourne "Vroom !" » Egalement valable pour les objets prédéfinis de JavaScript String.prototype.inverser = function() { var inverse = ""; for (i = this.length - 1; i >= 0; i--) { inverse += this.charAt(i); } return inverse; } var chaine = "Bonjour !"; chaine.inverser(); //retourne "! ruojnoB" 9 Solutions Linux – 30 janvier 2008
  • 10. Aspects techniques méconnus Orientation objet – Héritage par prototypes » Héritage par assignation de l'objet père au prototype du fils » Dynamique » Héritage via la remontée de la chaîne des prototypes function Voiture() { this.demarrer = function() { return ”Vroom !" + this.marque; } } function Sportive(param) { this.marque = param; } Sportive.prototype = new Voiture(); Sportive.prototype.constructor = Voiture; Sportive.prototype.accelerer = function() { return “Vroom vroom !!”; } var maVoiture = new Sportive("Porsche"); Voiture.prototype.freiner = function() { return "Hiiin !"; } //maVoiture.demarrer() retourne : Vroom ! Porsche //maVoiture.accelerer() retourne : Vroom vroom !! //maVoiture.freiner() retourne : Hiiin ! 10 Solutions Linux – 30 janvier 2008
  • 11. Aspects techniques méconnus Orientation objet – Héritage par classes » Apparition de bibliothèques simulant le modèle de classes » Extention de l'object “Function” pour y ajouter des méthodes » Exemples - Librairie de Douglas Crockford (http://javascript.crockford.com/inheritance.html) - Base (http://dean.edwards.name/base) - Prototype (http://www.prototypejs.org) » Future évolution d'ECMAScript 4 (et JavaScript 2) » Modèle alternatif et optionnel de programmation par classes » Introduction des notions de types, classes et interfaces » Fait pour faciliter l'adoption par les développeurs » Mode strict ou mixte 11 Solutions Linux – 30 janvier 2008
  • 12. Aspects techniques méconnus Orientation objet – Encapsulation (1/2) » Propriétés publiques : les composants (attributs ou méthodes) d'un objet sont, par défaut, accessibles à tous ; function Objet1() { this.attribut = "Attribut public"; } MonObjet1.prototype.fonction = function() { return "Fonction publique"; } var MonObjet1 = new Objet1(); MonObjet1.attribut; //contient "Attribut public" MonObjet1.fonction(); //retourne "Fonction publique" » Propriétés privées : créés dans le constructeur, accessibles seulement via les méthodes privées de l'objet lui-même ; function Objet2() { var attribut = "Attribut privé"; function fonction() { return "Fonction privée"; } } var MonObjet2 = new Objet2(); MonObjet2.attribut; //contient "undefined" MonObjet2.fonction(); //retourne l'erreur "MonObjet2.fonction() is not a function" 12 Solutions Linux – 30 janvier 2008
  • 13. Aspects techniques méconnus Orientation objet – Encapsulation (2/2) » Méthodes privilégiées : méthodes pouvant accéder aux composants privés de l'objet tout en étant accessibles depuis l'extérieur function Objet3() { var attribut = "Attribut privé"; this.fonction = function() { return(attribut); }; } var MonObjet3 = new Objet3(); MonObjet3.fonction(); //retourne "Attribut privé" 13 Solutions Linux – 30 janvier 2008
  • 14. Aspects techniques méconnus Typage » JavaScript est dynamiquement typé » Cela ne veut pas dire qu'il n'est pas typé » Types primaires » Récupérable via l'opérateur typeof » number, string, object, boolean, function, undefined » Autre manière de voir : constructor.name » Object : objet générique non typé ; » Boolean : booléen (vaut true ou false) ; » Number : nombre entier ou décimal ; » String : chaîne de caractères ; » Array : tableau ; » Function : fonction contenant une portion de code ; » [NomConstructeur] : type défini par l'utilisateur via une fonction constructeur. 14 Solutions Linux – 30 janvier 2008
  • 15. Aspects techniques méconnus Exceptions » try... catch... finally try { // Code à tester throw "Erreur 1"; } catch(erreur) { // Code à exécuter en cas d'erreur // erreur = “Erreur 1” } finally { // Code à exécuter dans les deux cas } » Possibilité d'empiler les instructions “catch” chez Mozilla try { ... } catch ( e if e == "InvalidNameException" ) { ... } catch ( e if e == "InvalidIdException" ) { ... } catch ( e if e == "InvalidEmailException" ) { ... } catch ( e ) { ... } 15 Solutions Linux – 30 janvier 2008
  • 16. Aspects techniques méconnus Closures » Contexte d'exécution de fonctions imbriquées » fonction contenue accède aux propriétés de la fonction contenante » même après l'exécution de la fonction contenante » Exemple function CreerActionVoiture(action) { return function() { return “La voiture est en train de " + action; } } function Voiture() { this.demarrer = CreerActionVoiture("démarrer"); this.freiner = CreerActionVoiture("freiner"); this.arreter = CreerActionVoiture("s'arrêter"); } var maVoiture = new Voiture(); //maVoiture.demarrer() retourne : La voiture est en train de démarrer //maVoiture.freiner() retourne : La voiture est en train de freiner //maVoiture.arreter() retourne : La voiture est en train de s'arrêter » Attention : on peut parfois créer des closures sans s'en rendre compte... 16 Solutions Linux – 30 janvier 2008
  • 17. Aspects techniques méconnus ECMAScript for XML (E4X) » Nouveau type d'objet : XML » Implémenté par Mozilla et Adobe » Exemple var voitures = new XML(); voitures = <voitures> <voiture marque="Renault" modele="Megane"/> <voiture marque="Porsche" modele="911"/> <voiture marque="Honda" modele="Civic"/> </voitures>; alert(voitures.voiture.(@marque == "Renault").@modele); //Affiche: Megane for each(var voiture in voitures..@marque) { alert(marque); } //Affiche : //Renault //Porsche //Honda 17 Solutions Linux – 30 janvier 2008
  • 18. Outils libres disponibles Interpréteurs en ligne de commande (shell) » SpiderMonkey : js (http://developer-stage.mozilla.org/en/docs/Introduction_to_the_JavaScript_shell) » Mode interactif » Shebang #!/usr/bin/js -w var toto = "titi"; print(toto); » Rhino (http://www.mozilla.org/rhino/shell.html) » java org.mozilla.javascript.tools.shell.Main monscript.js » Kjsembed (http://xmelegance.org/kjsembed) » Script shell KDE wrapper de KJS » Permet aux applications KDE d'executer du JavaScript » Kjscmd : ligne de commande ou console graphique » Shells interactifs utilisable dans le browser » Jash (http://www.billyreisinger.com/jash/) » Rainbow9 (http://www.rainbow9.org) 18 Solutions Linux – 30 janvier 2008
  • 19. Outils libres disponibles Debuggers » Rhino (http://www.mozilla.org/rhino/debugger.html) » Pour code executé par Rhino (pas browser) » Venkman (https://addons.mozilla.org/fr/firefox/addon/216) » Extension Firefox développée par Mozilla » Firebug (http://www.getfirebug.com) » Extension Firefox développée par Joe Hewitt » Debugger mais aussi profiling, logging » Outil très complet (HTML, DOM, CSS) 19 Solutions Linux – 30 janvier 2008
  • 20. Outils libres disponibles Environnements de développement (1/2) » cf. http://www.qsos.org 20 Solutions Linux – 30 janvier 2008
  • 21. Outils libres disponibles Environnements de développement - Aptana (2/2) » Aptana Studio est le plus complet » Basé sur Eclipse » Editeur JS avancé - Coloration syntaxique - Intellisense - Autocompletion » Optimisation de code - Logging - Debugging - Profiling » Génération JsDoc » Navigation dans le code » Fonctionnalités HTML, CSS 21 Solutions Linux – 30 janvier 2008
  • 22. Outils libres disponibles Utilitaires » JSLint (http://www.jslint.com/lint.html) » JavaScript Verifier » Plus strict qu'ECMAScript (vision de Crockford) » Utilisable online, avec Rhino ou WSH » JsUnit (http://www.jsunit.net) » Tests unitaires » Il existe une version serveur (Java, Ant) » JSCoverage » Mesures de couverture de code » Instrumentation du code » Rapport dans une page HTML » JsDoc (http://jsdoc.sourceforge.net) et JsToolkit (http://jsdoctoolkit.org) » JavaScript Documentation Tools » Inspirés de JavaDoc » JsToolkit est basé sur JsDoc 22 Solutions Linux – 30 janvier 2008
  • 23. Le futur de JavaScript ECMAScript 4 » La version 4 de norme ECMAScript est en cours d'élaboration » Elle prend en compte certaines fonctionnalités d'ActionScript 3.0 » Nouveautés : » Orientation objet : modèle plus classique de classes, interfaces » Modularisation du code : espaces de nommage, notion de packages » Typage : - typage statique optionnel sous forme d'annotations - possibilité de mixer des styles de typages - mode optionnel de compilation stricte » Nombreuses autres nouveautés » ... » cf. http://www.ecmascript.org 23 Solutions Linux – 30 janvier 2008
  • 24. Le futur de JavaScript Le projet Tamarin » Adobe ActionScript Virtual Machine (AVM2) intégrée dans Flash 9 » Machine virtuelle » Compilateur JIT » Garbage collector » Don en Novembre 2006 à Mozilla au sein du projet Tamarin » Implémentation compatible avec ECMAScript 4 » Intégration avec SpiderMonkey (JavaScript 2) » Courant 2008... 24 Solutions Linux – 30 janvier 2008
  • 25. Questions / Réponses raphael.semeteys@atosorigin.com © 2008 Atos Origin. Document exclusivement réservé à usage commercial. Tout ou partie de ce document ne peut être copié, modifié, diffusé ou annoté sans accord écrit d'Atos Origin ou du client.