SlideShare a Scribd company logo
1 of 117
Download to read offline
JavaScript, ce n’est pas
                             (si) sale
                                                    Julien Jakubowski
                                                         Ch’ti JUG




                 Document sous license Creative Commons Attribution - Pas d’Utilisation Commerciale - Pas de Modification
                          2.0 France (CC BY-NC-ND 2.0) - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
mardi 25 septembre 2012
Qui suis-je ?
                          Julien Jakubowski - @jak78
                          Développeur Java et web depuis ~10 ans




mardi 25 septembre 2012
Qui ne suis-je pas ?

                          Un véritable expert JavaScript ;-)
                          John Resig - jQuery
                          Douglas Crockford - JSLint, JavaScript
                          the Good Parts



mardi 25 septembre 2012
On va parler de JavaScript
               entre Javaïstes




mardi 25 septembre 2012
On va parler de JavaScript
               entre Javaïstes




      Java is to JavaScript as Ham is to Hamster
      http://coding.smashingmagazine.com/2009/07/29/misunderstanding-markup-xhtml-2-comic-strip/

mardi 25 septembre 2012
On va aussi parler de :




     Super-héros            Bière     Maroilles



mardi 25 septembre 2012
Pourquoi cette
                          présentation ?



mardi 25 septembre 2012
En 2003




mardi 25 septembre 2012
Maintenant...




mardi 25 septembre 2012
Et aussi...




mardi 25 septembre 2012
Forts enjeux
                          Volume de code important
                          Fini de jouer !



mardi 25 septembre 2012
100 000 lignes de code
                       JavaScript ?



                                Young man hidden behind table - © 2011 Richard Hernández Arrondo
mardi 25 septembre 2012
Young man hidden behind table - © 2011 Richard Hernández Arrondo




mardi 25 septembre 2012
Pourquoi ?



mardi 25 septembre 2012
Parce que JavaScript,
                          c’est SALE




mardi 25 septembre 2012
Parce que JavaScript,
                          c’est surprenant




mardi 25 septembre 2012
WAT???

             https://www.destroyallsoftware.com/talks/wat
             Gary Bernhardt
             http://codemash.org/




mardi 25 septembre 2012
mardi 25 septembre 2012
WAT???

             https://www.destroyallsoftware.com/talks/wat
             Gary Bernhardt
             http://codemash.org/




mardi 25 septembre 2012
√ Super-héros          Bière   Maroilles




mardi 25 septembre 2012
Conversion de types




mardi 25 septembre 2012
Conversion de types




                                    ???
                                  AT
                                 W
mardi 25 septembre 2012
Conversion de types




mardi 25 septembre 2012
La solution ?




mardi 25 septembre 2012
√ Super-héros          √   Bière   Maroilles




mardi 25 septembre 2012
Pollution de l’espace
                              de nommage




mardi 25 septembre 2012
Pollution de l’espace
                              de nommage




mardi 25 septembre 2012
Pollution de l’espace
                              de nommage




mardi 25 septembre 2012
Global par défaut




mardi 25 septembre 2012
Global par défaut




mardi 25 septembre 2012
Global par défaut




mardi 25 septembre 2012
Global par défaut




mardi 25 septembre 2012
Global par défaut




mardi 25 septembre 2012
Tout est « public » par
                            défaut




mardi 25 septembre 2012
Tout est « public » par
                            défaut




mardi 25 septembre 2012
// Attendu :
                          1
                          {
                            degre: '8%'
                          }




mardi 25 septembre 2012
// Attendu :
                          1
                          {
                            degre: '8%'
                          }


                          // Obtenu :
                          -1
                          undefined




mardi 25 septembre 2012
Automatic semi-column insertion
                                     // Attendu :
                                     1
                                     {
                                       degre: '8%'
                                     }


                                     // Obtenu :
                                     -1
                                     undefined




mardi 25 septembre 2012
Et il en reste...

                          Le mot-clé this (plutôt surprenant
                          que sale)
                          eval
                          ordre de déclaration du mot-clé var
                          ...


mardi 25 septembre 2012
Le plus sale :

                          Pollution de l’espace de nommage
                          Tout global par défaut
                          Insertion automatique de points-virgule




mardi 25 septembre 2012
Oui, mais...



mardi 25 septembre 2012
mardi 25 septembre 2012
√ Super-héros          √   Bière   √ Maroilles


mardi 25 septembre 2012
Comment coder 100 000
                 lignes de code en JavaScript
                    d’une façon pas si sale ?



mardi 25 septembre 2012
Eviter JavaScript

                          GWT
                          CoffeeScript
                          DART


mardi 25 septembre 2012
Modulariser




           http://www.gettyimages.fr/detail/photo/black-and-white-jigsaw-pieces-form-a-square-photo/100479289
mardi 25 septembre 2012
Qu’est-ce qu’un
                            module ?




mardi 25 septembre 2012
Qu’est-ce qu’un
                            module ?

                    • Ensemble de code



mardi 25 septembre 2012
Qu’est-ce qu’un
                            module ?

                    • Ensemble de code
                    • Présente une interface


mardi 25 septembre 2012
Qu’est-ce qu’un
                            module ?

                    • Ensemble de code
                    • Présente une interface
                    • Masque ses détails d’implémentation

mardi 25 septembre 2012
mardi 25 septembre 2012
mardi 25 septembre 2012
mardi 25 septembre 2012
mardi 25 septembre 2012
mardi 25 septembre 2012
mardi 25 septembre 2012
mardi 25 septembre 2012
mardi 25 septembre 2012
mardi 25 septembre 2012
Architecturer son code




            http://www.gettyimages.fr/detail/illustration/forklift-building-a-cube-with-smaller-illustration-libre-de-droits/109424118
mardi 25 septembre 2012
Diviser 100 000 lignes de
                      code en plusieurs fichiers




               Temps de chargement   Dépendances


mardi 25 septembre 2012
Diviser 100 000 lignes de
                      code en plusieurs fichiers




               Temps de chargement   Dépendances


mardi 25 septembre 2012
AMD
                          RequireJS, Curl...




mardi 25 septembre 2012
AMD
                          RequireJS, Curl...
               √ Découper mes 100 000 lignes en sous-modules




mardi 25 septembre 2012
AMD
                          RequireJS, Curl...
               √ Découper mes 100 000 lignes en sous-modules
               √ Chaque module est dans son scope isolé




mardi 25 septembre 2012
AMD
                          RequireJS, Curl...
               √ Découper mes 100 000 lignes en sous-modules
               √ Chaque module est dans son scope isolé
               √ Chargement asynchrone et à la demande




mardi 25 septembre 2012
AMD
                          RequireJS, Curl...
               √ Découper mes 100 000 lignes en sous-modules
               √ Chaque module est dans son scope isolé
               √ Chargement asynchrone et à la demande
               X Ordre du chargement et asynchronisme




mardi 25 septembre 2012
AMD
                           RequireJS, Curl...
               √ Découper mes 100 000 lignes en sous-modules
               √ Chaque module est dans son scope isolé
               √ Chargement asynchrone et à la demande
               X Ordre du chargement et asynchronisme
               X Intégration avec librairies tierces



mardi 25 septembre 2012
Backbone.js
                          Sorte de SpringMVC / JSF




mardi 25 septembre 2012
Backbone.js
                               Sorte de SpringMVC / JSF

                          √ Structure votre code en MVC / MVP




mardi 25 septembre 2012
Backbone.js
                                Sorte de SpringMVC / JSF

                          √ Structure votre code en MVC / MVP
                          √ Maintenabilité d’applications de taille non-
                          triviale




mardi 25 septembre 2012
Backbone.js
                                Sorte de SpringMVC / JSF

                          √ Structure votre code en MVC / MVP
                          √ Maintenabilité d’applications de taille non-
                          triviale
                          X Coût d’entrée




mardi 25 septembre 2012
Backbone.js
                                Sorte de SpringMVC / JSF

                          √ Structure votre code en MVC / MVP
                          √ Maintenabilité d’applications de taille non-
                          triviale
                          X Coût d’entrée
                          X Maturité, pas de standards (AngularJS...)



mardi 25 septembre 2012
Tests automatisés




                          http://www.flickr.com/photos/horiavarlan/4747872021/sizes/l/in/photostream/
mardi 25 septembre 2012
Tests d’IHM


                                 Selenium         Windmill
                          Robotisent un navigateur qui attaque votre
                          application




mardi 25 septembre 2012
Tests unitaires

                                    TestNG




mardi 25 septembre 2012
Tests unitaires

                                    TestNG



                          Jasmine    QUnit


mardi 25 septembre 2012
Démo



mardi 25 septembre 2012
Jasmine


                          Démo



mardi 25 septembre 2012
Eviter les parties sales




                  http://www.gettyimages.fr/detail/photo/hands-of-a-blacksmith-in-his-studio-image-libre-de-droits/109889293
mardi 25 septembre 2012
JsLint

               Trouve les utilisations d’ugly parts
               Sorte de CheckStyle / PMD / FindBugs
               S’intègre à Eclipse




mardi 25 septembre 2012
Eclipse seul




mardi 25 septembre 2012
Eclipse avec JsLint




mardi 25 septembre 2012
Expressivité




                          http://www.gettyimages.fr/detail/photo/detail-of-sheet-music-image-libre-de-droits/AA004801
mardi 25 septembre 2012
Un code expressif ?

                    •     Simple
                    • Concis
                    • Lisible


mardi 25 septembre 2012
mardi 25 septembre 2012
Pollution
mardi 25 septembre 2012
Pollution     Peu lisible
mardi 25 septembre 2012
Pollution     Peu lisible   SALE !
mardi 25 septembre 2012
Avec




mardi 25 septembre 2012
Avec




  Pas de pollution
mardi 25 septembre 2012
Avec




  Pas de pollution         Concision, lisibilité
mardi 25 septembre 2012
Avec




  Pas de pollution         Concision, lisibilité   Propre
mardi 25 septembre 2012
C’est surtout...


          • Lisibilité du code - expressivité
          • Simplifie ce qu’on utilise le plus fréquemment :
                 AJAX, manipulation du DOM...




mardi 25 septembre 2012
C’est aussi...


          • Nombreux plugins tiers
          • Structurer son application en plugins
          • Incoutournable !

mardi 25 septembre 2012
Mustache




                                     {
mardi 25 septembre 2012
Sans Mustache




mardi 25 septembre 2012
                                          {
Avec Mustache




mardi 25 septembre 2012
                                          {
Mustache




                                                        {
                          Templating JavaScript
                          Rendu HTML de façon lisible




mardi 25 septembre 2012
Mustache




                                                             {
                          A des concurrents (affaire de goûts...)
                          Avantage: existe aussi en Java !
                          ➔ Même moteur côté client et serveur




mardi 25 septembre 2012
Contrôle qualité
                            automatisé
                            Build et intégration continue




mardi 25 septembre 2012
Je veux être alerté si :
           • Test en échec
           • Partie sale utilisée
           • Erreur de syntaxe



mardi 25 septembre 2012
Je veux être alerté si :
           • Test en échec          Jasmine
           • Partie sale utilisée   JsLint
           • Erreur de syntaxe      Google Closure Compiler




mardi 25 septembre 2012
Je veux être alerté si :
           • Test en échec                   Jasmine
           • Partie sale utilisée            JsLint
           • Erreur de syntaxe               Google Closure Compiler

                          S’intègrent à Maven, Jenkins, Sonar




mardi 25 septembre 2012
Compiler du
                          JavaScript ?




mardi 25 septembre 2012
Compiler du
                               JavaScript ?

                          JavaScript est un langage interprété




mardi 25 septembre 2012
Compiler du
                               JavaScript ?

                          JavaScript est un langage interprété
                          Apports de la « compilation » :




mardi 25 septembre 2012
Compiler du
                               JavaScript ?

                          JavaScript est un langage interprété
                          Apports de la « compilation » :
                          • Vérification de la syntaxe



mardi 25 septembre 2012
Compiler du
                               JavaScript ?

                          JavaScript est un langage interprété
                          Apports de la « compilation » :
                          • Vérification de la syntaxe
                          • Code optimisé


mardi 25 septembre 2012
100 000 lignes de code
                           JavaScript: comment ?


              Modules         Architecture   Tests unitaires




        Parties sales                        Contrôle qualité
                              Expressivité
          évitées                              automatisé
mardi 25 septembre 2012
Et depuis...




                                    Businessman sitting at desk with feet up - Paul Bradbury
mardi 25 septembre 2012
Références




mardi 25 septembre 2012
Références
                                      Eloquent JavaScript
                          http://eloquentjavascript.net/contents.html




mardi 25 septembre 2012
Références
                                      Eloquent JavaScript
                          http://eloquentjavascript.net/contents.html

                                JavaScript Garden
                 http://bonsaiden.github.com/JavaScript-Garden/




mardi 25 septembre 2012
Références
                                      Eloquent JavaScript
                          http://eloquentjavascript.net/contents.html

                                JavaScript Garden
                 http://bonsaiden.github.com/JavaScript-Garden/

                            Learning Advanced JavaScript - J. Resig
                                 http://ejohn.org/apps/learn/




mardi 25 septembre 2012
Références
                                      Eloquent JavaScript
                          http://eloquentjavascript.net/contents.html

                                JavaScript Garden
                 http://bonsaiden.github.com/JavaScript-Garden/

                            Learning Advanced JavaScript - J. Resig
                                 http://ejohn.org/apps/learn/

                                JavaScript: the Good Parts - D.
                                           Crockford
mardi 25 septembre 2012
ROTI



                             http://www.flickr.com/photos/34943981@N00/202923614/


mardi 25 septembre 2012

More Related Content

Viewers also liked

Active News 1/2012: Point of Sale - Erfolgreich werben im direkten Kundenkontakt
Active News 1/2012: Point of Sale - Erfolgreich werben im direkten KundenkontaktActive News 1/2012: Point of Sale - Erfolgreich werben im direkten Kundenkontakt
Active News 1/2012: Point of Sale - Erfolgreich werben im direkten KundenkontaktActive International Deutschland
 
La cession d'un portefeuille d'assurances : les pièges
La cession d'un portefeuille d'assurances : les piègesLa cession d'un portefeuille d'assurances : les pièges
La cession d'un portefeuille d'assurances : les piègesDenis Gouzee
 
2010 - Einführung in die UML - Seitenbau Developer Convention
2010 -  Einführung in die UML - Seitenbau Developer Convention2010 -  Einführung in die UML - Seitenbau Developer Convention
2010 - Einführung in die UML - Seitenbau Developer ConventionChristian Baranowski
 
IntroduccióN A La Tecnologia GSM
IntroduccióN A La Tecnologia GSMIntroduccióN A La Tecnologia GSM
IntroduccióN A La Tecnologia GSMemergenciesfigueres
 
Td gsm iit
Td gsm iitTd gsm iit
Td gsm iitTECOS
 
Opcion Nctuns
Opcion NctunsOpcion Nctuns
Opcion Nctunsandres469
 
Places, Check-In & Co. - Welche Chancen bietet Mobile Marketing dem Point of...
Places, Check-In & Co. - Welche Chancen bietet Mobile Marketing  dem Point of...Places, Check-In & Co. - Welche Chancen bietet Mobile Marketing  dem Point of...
Places, Check-In & Co. - Welche Chancen bietet Mobile Marketing dem Point of...Dailyplaces
 
Capitulo 07 - Comunicaciones Moviles
Capitulo 07 - Comunicaciones MovilesCapitulo 07 - Comunicaciones Moviles
Capitulo 07 - Comunicaciones MovilesDavid Ortega Gallegos
 
Tp9 g1-2010 v08
Tp9 g1-2010 v08Tp9 g1-2010 v08
Tp9 g1-2010 v08ademiti
 
Uni fiee scm sesion 04 gestión de recursos radio
Uni fiee scm sesion 04 gestión de recursos radioUni fiee scm sesion 04 gestión de recursos radio
Uni fiee scm sesion 04 gestión de recursos radioc09271
 
Tesis: Requerimientos De Parámetros Para Transporte De Redes LTE
Tesis: Requerimientos De Parámetros Para  Transporte De Redes LTETesis: Requerimientos De Parámetros Para  Transporte De Redes LTE
Tesis: Requerimientos De Parámetros Para Transporte De Redes LTEGerson Chavarria Vera
 
Presentacion 4 g
Presentacion 4 gPresentacion 4 g
Presentacion 4 gM2oviedo
 
Redes Celulares
Redes CelularesRedes Celulares
Redes Celularesoemontiel
 

Viewers also liked (15)

Active News 1/2012: Point of Sale - Erfolgreich werben im direkten Kundenkontakt
Active News 1/2012: Point of Sale - Erfolgreich werben im direkten KundenkontaktActive News 1/2012: Point of Sale - Erfolgreich werben im direkten Kundenkontakt
Active News 1/2012: Point of Sale - Erfolgreich werben im direkten Kundenkontakt
 
La cession d'un portefeuille d'assurances : les pièges
La cession d'un portefeuille d'assurances : les piègesLa cession d'un portefeuille d'assurances : les pièges
La cession d'un portefeuille d'assurances : les pièges
 
2010 - Einführung in die UML - Seitenbau Developer Convention
2010 -  Einführung in die UML - Seitenbau Developer Convention2010 -  Einführung in die UML - Seitenbau Developer Convention
2010 - Einführung in die UML - Seitenbau Developer Convention
 
IntroduccióN A La Tecnologia GSM
IntroduccióN A La Tecnologia GSMIntroduccióN A La Tecnologia GSM
IntroduccióN A La Tecnologia GSM
 
Td gsm iit
Td gsm iitTd gsm iit
Td gsm iit
 
Estructura gsm
Estructura gsmEstructura gsm
Estructura gsm
 
Opcion Nctuns
Opcion NctunsOpcion Nctuns
Opcion Nctuns
 
Places, Check-In & Co. - Welche Chancen bietet Mobile Marketing dem Point of...
Places, Check-In & Co. - Welche Chancen bietet Mobile Marketing  dem Point of...Places, Check-In & Co. - Welche Chancen bietet Mobile Marketing  dem Point of...
Places, Check-In & Co. - Welche Chancen bietet Mobile Marketing dem Point of...
 
Capitulo 07 - Comunicaciones Moviles
Capitulo 07 - Comunicaciones MovilesCapitulo 07 - Comunicaciones Moviles
Capitulo 07 - Comunicaciones Moviles
 
Tp9 g1-2010 v08
Tp9 g1-2010 v08Tp9 g1-2010 v08
Tp9 g1-2010 v08
 
Uni fiee scm sesion 04 gestión de recursos radio
Uni fiee scm sesion 04 gestión de recursos radioUni fiee scm sesion 04 gestión de recursos radio
Uni fiee scm sesion 04 gestión de recursos radio
 
Respuesta 1 de chile
Respuesta 1 de chileRespuesta 1 de chile
Respuesta 1 de chile
 
Tesis: Requerimientos De Parámetros Para Transporte De Redes LTE
Tesis: Requerimientos De Parámetros Para  Transporte De Redes LTETesis: Requerimientos De Parámetros Para  Transporte De Redes LTE
Tesis: Requerimientos De Parámetros Para Transporte De Redes LTE
 
Presentacion 4 g
Presentacion 4 gPresentacion 4 g
Presentacion 4 g
 
Redes Celulares
Redes CelularesRedes Celulares
Redes Celulares
 

More from Julien Jakubowski

Nos trucs et astuces pour construire des produits que les devs adorent chez ADEO
Nos trucs et astuces pour construire des produits que les devs adorent chez ADEONos trucs et astuces pour construire des produits que les devs adorent chez ADEO
Nos trucs et astuces pour construire des produits que les devs adorent chez ADEOJulien Jakubowski
 
Sur le chemin de la qualité - GDG Lille
Sur le chemin de la qualité - GDG LilleSur le chemin de la qualité - GDG Lille
Sur le chemin de la qualité - GDG LilleJulien Jakubowski
 
Agile tour 2015 alliés contre les défauts
Agile tour 2015   alliés contre les défautsAgile tour 2015   alliés contre les défauts
Agile tour 2015 alliés contre les défautsJulien Jakubowski
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Julien Jakubowski
 

More from Julien Jakubowski (6)

Nos trucs et astuces pour construire des produits que les devs adorent chez ADEO
Nos trucs et astuces pour construire des produits que les devs adorent chez ADEONos trucs et astuces pour construire des produits que les devs adorent chez ADEO
Nos trucs et astuces pour construire des produits que les devs adorent chez ADEO
 
Sur le chemin de la qualité - GDG Lille
Sur le chemin de la qualité - GDG LilleSur le chemin de la qualité - GDG Lille
Sur le chemin de la qualité - GDG Lille
 
Agile tour 2015 alliés contre les défauts
Agile tour 2015   alliés contre les défautsAgile tour 2015   alliés contre les défauts
Agile tour 2015 alliés contre les défauts
 
Spring Batch ParisJUG
Spring Batch ParisJUG Spring Batch ParisJUG
Spring Batch ParisJUG
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
 
Sug spring batch
Sug spring batchSug spring batch
Sug spring batch
 

Javascript ce n'est pas (si) sale

  • 1. JavaScript, ce n’est pas (si) sale Julien Jakubowski Ch’ti JUG Document sous license Creative Commons Attribution - Pas d’Utilisation Commerciale - Pas de Modification 2.0 France (CC BY-NC-ND 2.0) - http://creativecommons.org/licenses/by-nc-nd/2.0/fr/ mardi 25 septembre 2012
  • 2. Qui suis-je ? Julien Jakubowski - @jak78 Développeur Java et web depuis ~10 ans mardi 25 septembre 2012
  • 3. Qui ne suis-je pas ? Un véritable expert JavaScript ;-) John Resig - jQuery Douglas Crockford - JSLint, JavaScript the Good Parts mardi 25 septembre 2012
  • 4. On va parler de JavaScript entre Javaïstes mardi 25 septembre 2012
  • 5. On va parler de JavaScript entre Javaïstes Java is to JavaScript as Ham is to Hamster http://coding.smashingmagazine.com/2009/07/29/misunderstanding-markup-xhtml-2-comic-strip/ mardi 25 septembre 2012
  • 6. On va aussi parler de : Super-héros Bière Maroilles mardi 25 septembre 2012
  • 7. Pourquoi cette présentation ? mardi 25 septembre 2012
  • 8. En 2003 mardi 25 septembre 2012
  • 10. Et aussi... mardi 25 septembre 2012
  • 11. Forts enjeux Volume de code important Fini de jouer ! mardi 25 septembre 2012
  • 12. 100 000 lignes de code JavaScript ? Young man hidden behind table - © 2011 Richard Hernández Arrondo mardi 25 septembre 2012
  • 13. Young man hidden behind table - © 2011 Richard Hernández Arrondo mardi 25 septembre 2012
  • 14. Pourquoi ? mardi 25 septembre 2012
  • 15. Parce que JavaScript, c’est SALE mardi 25 septembre 2012
  • 16. Parce que JavaScript, c’est surprenant mardi 25 septembre 2012
  • 17. WAT??? https://www.destroyallsoftware.com/talks/wat Gary Bernhardt http://codemash.org/ mardi 25 septembre 2012
  • 19. WAT??? https://www.destroyallsoftware.com/talks/wat Gary Bernhardt http://codemash.org/ mardi 25 septembre 2012
  • 20. √ Super-héros Bière Maroilles mardi 25 septembre 2012
  • 21. Conversion de types mardi 25 septembre 2012
  • 22. Conversion de types ??? AT W mardi 25 septembre 2012
  • 23. Conversion de types mardi 25 septembre 2012
  • 24. La solution ? mardi 25 septembre 2012
  • 25. √ Super-héros √ Bière Maroilles mardi 25 septembre 2012
  • 26. Pollution de l’espace de nommage mardi 25 septembre 2012
  • 27. Pollution de l’espace de nommage mardi 25 septembre 2012
  • 28. Pollution de l’espace de nommage mardi 25 septembre 2012
  • 29. Global par défaut mardi 25 septembre 2012
  • 30. Global par défaut mardi 25 septembre 2012
  • 31. Global par défaut mardi 25 septembre 2012
  • 32. Global par défaut mardi 25 septembre 2012
  • 33. Global par défaut mardi 25 septembre 2012
  • 34. Tout est « public » par défaut mardi 25 septembre 2012
  • 35. Tout est « public » par défaut mardi 25 septembre 2012
  • 36. // Attendu : 1 { degre: '8%' } mardi 25 septembre 2012
  • 37. // Attendu : 1 { degre: '8%' } // Obtenu : -1 undefined mardi 25 septembre 2012
  • 38. Automatic semi-column insertion // Attendu : 1 { degre: '8%' } // Obtenu : -1 undefined mardi 25 septembre 2012
  • 39. Et il en reste... Le mot-clé this (plutôt surprenant que sale) eval ordre de déclaration du mot-clé var ... mardi 25 septembre 2012
  • 40. Le plus sale : Pollution de l’espace de nommage Tout global par défaut Insertion automatique de points-virgule mardi 25 septembre 2012
  • 41. Oui, mais... mardi 25 septembre 2012
  • 43. √ Super-héros √ Bière √ Maroilles mardi 25 septembre 2012
  • 44. Comment coder 100 000 lignes de code en JavaScript d’une façon pas si sale ? mardi 25 septembre 2012
  • 45. Eviter JavaScript GWT CoffeeScript DART mardi 25 septembre 2012
  • 46. Modulariser http://www.gettyimages.fr/detail/photo/black-and-white-jigsaw-pieces-form-a-square-photo/100479289 mardi 25 septembre 2012
  • 47. Qu’est-ce qu’un module ? mardi 25 septembre 2012
  • 48. Qu’est-ce qu’un module ? • Ensemble de code mardi 25 septembre 2012
  • 49. Qu’est-ce qu’un module ? • Ensemble de code • Présente une interface mardi 25 septembre 2012
  • 50. Qu’est-ce qu’un module ? • Ensemble de code • Présente une interface • Masque ses détails d’implémentation mardi 25 septembre 2012
  • 60. Architecturer son code http://www.gettyimages.fr/detail/illustration/forklift-building-a-cube-with-smaller-illustration-libre-de-droits/109424118 mardi 25 septembre 2012
  • 61. Diviser 100 000 lignes de code en plusieurs fichiers Temps de chargement Dépendances mardi 25 septembre 2012
  • 62. Diviser 100 000 lignes de code en plusieurs fichiers Temps de chargement Dépendances mardi 25 septembre 2012
  • 63. AMD RequireJS, Curl... mardi 25 septembre 2012
  • 64. AMD RequireJS, Curl... √ Découper mes 100 000 lignes en sous-modules mardi 25 septembre 2012
  • 65. AMD RequireJS, Curl... √ Découper mes 100 000 lignes en sous-modules √ Chaque module est dans son scope isolé mardi 25 septembre 2012
  • 66. AMD RequireJS, Curl... √ Découper mes 100 000 lignes en sous-modules √ Chaque module est dans son scope isolé √ Chargement asynchrone et à la demande mardi 25 septembre 2012
  • 67. AMD RequireJS, Curl... √ Découper mes 100 000 lignes en sous-modules √ Chaque module est dans son scope isolé √ Chargement asynchrone et à la demande X Ordre du chargement et asynchronisme mardi 25 septembre 2012
  • 68. AMD RequireJS, Curl... √ Découper mes 100 000 lignes en sous-modules √ Chaque module est dans son scope isolé √ Chargement asynchrone et à la demande X Ordre du chargement et asynchronisme X Intégration avec librairies tierces mardi 25 septembre 2012
  • 69. Backbone.js Sorte de SpringMVC / JSF mardi 25 septembre 2012
  • 70. Backbone.js Sorte de SpringMVC / JSF √ Structure votre code en MVC / MVP mardi 25 septembre 2012
  • 71. Backbone.js Sorte de SpringMVC / JSF √ Structure votre code en MVC / MVP √ Maintenabilité d’applications de taille non- triviale mardi 25 septembre 2012
  • 72. Backbone.js Sorte de SpringMVC / JSF √ Structure votre code en MVC / MVP √ Maintenabilité d’applications de taille non- triviale X Coût d’entrée mardi 25 septembre 2012
  • 73. Backbone.js Sorte de SpringMVC / JSF √ Structure votre code en MVC / MVP √ Maintenabilité d’applications de taille non- triviale X Coût d’entrée X Maturité, pas de standards (AngularJS...) mardi 25 septembre 2012
  • 74. Tests automatisés http://www.flickr.com/photos/horiavarlan/4747872021/sizes/l/in/photostream/ mardi 25 septembre 2012
  • 75. Tests d’IHM Selenium Windmill Robotisent un navigateur qui attaque votre application mardi 25 septembre 2012
  • 76. Tests unitaires TestNG mardi 25 septembre 2012
  • 77. Tests unitaires TestNG Jasmine QUnit mardi 25 septembre 2012
  • 79. Jasmine Démo mardi 25 septembre 2012
  • 80. Eviter les parties sales http://www.gettyimages.fr/detail/photo/hands-of-a-blacksmith-in-his-studio-image-libre-de-droits/109889293 mardi 25 septembre 2012
  • 81. JsLint Trouve les utilisations d’ugly parts Sorte de CheckStyle / PMD / FindBugs S’intègre à Eclipse mardi 25 septembre 2012
  • 82. Eclipse seul mardi 25 septembre 2012
  • 83. Eclipse avec JsLint mardi 25 septembre 2012
  • 84. Expressivité http://www.gettyimages.fr/detail/photo/detail-of-sheet-music-image-libre-de-droits/AA004801 mardi 25 septembre 2012
  • 85. Un code expressif ? • Simple • Concis • Lisible mardi 25 septembre 2012
  • 88. Pollution Peu lisible mardi 25 septembre 2012
  • 89. Pollution Peu lisible SALE ! mardi 25 septembre 2012
  • 91. Avec Pas de pollution mardi 25 septembre 2012
  • 92. Avec Pas de pollution Concision, lisibilité mardi 25 septembre 2012
  • 93. Avec Pas de pollution Concision, lisibilité Propre mardi 25 septembre 2012
  • 94. C’est surtout... • Lisibilité du code - expressivité • Simplifie ce qu’on utilise le plus fréquemment : AJAX, manipulation du DOM... mardi 25 septembre 2012
  • 95. C’est aussi... • Nombreux plugins tiers • Structurer son application en plugins • Incoutournable ! mardi 25 septembre 2012
  • 96. Mustache { mardi 25 septembre 2012
  • 97. Sans Mustache mardi 25 septembre 2012 {
  • 98. Avec Mustache mardi 25 septembre 2012 {
  • 99. Mustache { Templating JavaScript Rendu HTML de façon lisible mardi 25 septembre 2012
  • 100. Mustache { A des concurrents (affaire de goûts...) Avantage: existe aussi en Java ! ➔ Même moteur côté client et serveur mardi 25 septembre 2012
  • 101. Contrôle qualité automatisé Build et intégration continue mardi 25 septembre 2012
  • 102. Je veux être alerté si : • Test en échec • Partie sale utilisée • Erreur de syntaxe mardi 25 septembre 2012
  • 103. Je veux être alerté si : • Test en échec Jasmine • Partie sale utilisée JsLint • Erreur de syntaxe Google Closure Compiler mardi 25 septembre 2012
  • 104. Je veux être alerté si : • Test en échec Jasmine • Partie sale utilisée JsLint • Erreur de syntaxe Google Closure Compiler S’intègrent à Maven, Jenkins, Sonar mardi 25 septembre 2012
  • 105. Compiler du JavaScript ? mardi 25 septembre 2012
  • 106. Compiler du JavaScript ? JavaScript est un langage interprété mardi 25 septembre 2012
  • 107. Compiler du JavaScript ? JavaScript est un langage interprété Apports de la « compilation » : mardi 25 septembre 2012
  • 108. Compiler du JavaScript ? JavaScript est un langage interprété Apports de la « compilation » : • Vérification de la syntaxe mardi 25 septembre 2012
  • 109. Compiler du JavaScript ? JavaScript est un langage interprété Apports de la « compilation » : • Vérification de la syntaxe • Code optimisé mardi 25 septembre 2012
  • 110. 100 000 lignes de code JavaScript: comment ? Modules Architecture Tests unitaires Parties sales Contrôle qualité Expressivité évitées automatisé mardi 25 septembre 2012
  • 111. Et depuis... Businessman sitting at desk with feet up - Paul Bradbury mardi 25 septembre 2012
  • 113. Références Eloquent JavaScript http://eloquentjavascript.net/contents.html mardi 25 septembre 2012
  • 114. Références Eloquent JavaScript http://eloquentjavascript.net/contents.html JavaScript Garden http://bonsaiden.github.com/JavaScript-Garden/ mardi 25 septembre 2012
  • 115. Références Eloquent JavaScript http://eloquentjavascript.net/contents.html JavaScript Garden http://bonsaiden.github.com/JavaScript-Garden/ Learning Advanced JavaScript - J. Resig http://ejohn.org/apps/learn/ mardi 25 septembre 2012
  • 116. Références Eloquent JavaScript http://eloquentjavascript.net/contents.html JavaScript Garden http://bonsaiden.github.com/JavaScript-Garden/ Learning Advanced JavaScript - J. Resig http://ejohn.org/apps/learn/ JavaScript: the Good Parts - D. Crockford mardi 25 septembre 2012
  • 117. ROTI http://www.flickr.com/photos/34943981@N00/202923614/ mardi 25 septembre 2012