SlideShare une entreprise Scribd logo
1  sur  77
Du JavaScript
propre ?
Challenge
Accepted!

Julien
Jakubowski
OCTO Technology

@jak78

Romain Linsolas
Société Générale

@romaintaz
27 au 29 mars 2013
Romain Linsolas
Développeur Java & Web
Architecte Technique

@romaintaz
Julien Jakubowski
Développeur Java & Web depuis 11 ans
@jak78
Nous ne sommes pas…
Des gourous JavaScript
John Resig - jQuery

Douglas Crockford – JSLint,
"JavaScript, The Good Parts"
JavaScript et Java ?

http://www.flickr.com/photos/naturesauraphotography/

http://commons.wikimedia.org/wiki/User:DocteurCosmos

JavaScript is to Java as Hamster is to Ham

http://coding.smashingmagazine.com/2009/07/29/misunderstandingmarkup-xhtml-2-comic-strip/
Nous allons aussi parler de…

Darth Vader

Bière

Maroilles
Pourquoi cette
présentation ?
En 2003
Le JavaScript est partout !
Runtime le plus distribué
Navigateurs desktop,
mobile…
Même côté serveur
(
, …)
Les géants du web
Les géants du web
Nouveaux besoins
Les utilisateurs veulent des applications
vivantes, réactives et dynamiques !
Enjeu de qualité
Volume de code important

 Fini de jouer !
100,000 lignes de code
JavaScript ?

Young man hidden behind table - © 2011 Richard Hernández Arrondo
Pourquoi ça fait peur ?

Le JavaScript
c'est
surprenant
SALE
WAT ?
> [] + []
""
> [] + {}
[object Object]
> {} + []
0
> {} + {}
NaN
> ++[[]][+[]]+[+[]] === "10"
true
A
W
??
?
T
Gary Bernhardt
http://codemash.org
https://www.destroyallsoftware.com/talks/wat
Darth Vader

Bière

Maroilles
Autre problème JavaScript

T
A
W
??
?
Pollution de l'espace de nommage
Scope global par défaut
Tout est public par défaut
Darth Vader

Bière

Maroilles
Et ce n'est pas tout !

Le mot clé this (plus surprenant
que sale)
Ordre de déclaration de var
Etc.
Mais le plus sale

Pollution de l'espace de
nommage
Tout est global par défaut
Code non testé
Oui mais…
Author : Frédérique Voisin-Demery http://www.flickr.com/people/8514720@N04
Nous allons aussi parler de…

Darth Vader

Bière

Maroilles
Comment coder
proprement
100,000 lignes
en JavaScript ?
On pourrait éviter le
JavaScript…
Déléguer
• GWT
• JSF
• Vaadin
• Etc.
On pourrait utiliser un
« JavaScript amélioré »

Langage web orienté objet
« Ce que JavaScript serait s’il
avait été inventé aujourd’hui »

Un JavaScript moins verbeux
Sucre syntaxique
Exemple de CoffeeScript
JavaScript
Architectures MV*

http://www.gettyimages.fr/detail/illustration/forklift-building-a-cube-with-smaller-illustration-libre-de-droits/109424118
Architecture MVC classique
<html>
+
JS

Client
Serveur
Controller

Model

View
Mes besoins aujourd'hui

Temps de réponse instantané
Gestion de réseaux lents
(mobiles…)
Mode déconnecté
Architecture MV* en
JavaScript
View

Controller

Model
Client
Serveur
…
Question implémentation

Frameworks optionnels, mais aident beaucoup
Pas encore de standard
Modulariser

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

Représente un ensemble de
code
Isolation – faible couplage
Présente une interface
Un module basique Présentation
Un module basique
Un module basique
Un module basique
Un module basique
Un module basique
Un module basique
Espace de nommage
Diviser en plusieurs fichiers
.js ?

Temps de chargement
Pas de gestion des dépendances
AMD, Asynchronous Module
Definition
Définition de dépendances

jQuery

Mustac
he

beers.j
s
AMD, Asynchronous Module
Definition
Chargements parallèles, à la demande

jQuery Mustac beers. sodas.j
he
js
s
jQuery
Mustac
he

beers.j
s
Eviter les parties sales

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

Détection des ugly parts
Equivalent à PMD / Checkstyle /
FindBugs pour JS
Intégration dans les IDE
Intégration dans Eclipse
Expressivité

http://www.gettyimages.fr/detail/photo/detail-of-sheet-music-image-libre-de-droits/AA004801
Qu'est-ce qu'un code expressif
?

C'est un code simple,
concis,
lisible
Mauvais exemple

Pollution
, mauvaise lisibilité
=> SALE
Avec

Pas de pollution
Lisibilité accrue
Code propre
Templates
A la main
Avec template (Mustache.js)
Outils de templating

Mustache
Tests automatisés

http://www.flickr.com/photos/horiavarlan/4747872021/sizes/l/in/photostream/
Tests d'IHM

Selenium
Conditions réalistes
Lent, fragile
TDD pour JavaScript
En Java

TestNG

En JavaScript
Tests avec Jasmine
Ecosystème

Devoxx FR 2013 University « Le fantôme, le zombie et
Testacular… »
Jean-Laurent De Morlhon et Pierre Gayvallet
TDD en JavaScript
Automatisation
Détecter et alerter

Quand un test échoue
Quand une partie sale est
utilisée
S'il y a une erreur de
syntaxe

 Jasmine
 JsLint
 Google Closure
Compiler

Intégration dans Maven, Jenkins ou SonarQube
Intégration continue avec
Jenkins

http://localhost:8080/job/Test%20Jasmine/1/consol
Analyse qualité avec Sonar
D'autres outils utiles
100,000 lignes de
JavaScript ?

MV*

Modules

Parties sales
évitées

Expressivité

Tests

Automatisation
Le monde des bisounours ?
Le monde des bisounours ?
Oui mais non !

Intégration
Pérennité
Apprentissage
Businessman sitting at desk with feet up - Paul Bradbury
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
Questions ?

@jak78

@romaintaz

Contenu connexe

Tendances

Utilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDBUtilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDB13p
 
Présentation de BackBone.JS
Présentation de BackBone.JSPrésentation de BackBone.JS
Présentation de BackBone.JSNoirdes
 
MVVM par Karim PIerre Maalej
MVVM par Karim PIerre MaalejMVVM par Karim PIerre Maalej
MVVM par Karim PIerre MaalejCocoaHeads France
 
Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptKhalid Jebbari
 
Introduction to Rust in Production - Servo Mozilla project (Slides)
Introduction to Rust in Production - Servo Mozilla project (Slides)Introduction to Rust in Production - Servo Mozilla project (Slides)
Introduction to Rust in Production - Servo Mozilla project (Slides)Quentin Frémeaux
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.jsTelecomValley
 
L'architecture MVVM avec KnockoutJS
L'architecture MVVM avec KnockoutJSL'architecture MVVM avec KnockoutJS
L'architecture MVVM avec KnockoutJSDavid Bottiau
 

Tendances (12)

Utilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDBUtilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDB
 
Présentation de BackBone.JS
Présentation de BackBone.JSPrésentation de BackBone.JS
Présentation de BackBone.JS
 
MVVM par Karim PIerre Maalej
MVVM par Karim PIerre MaalejMVVM par Karim PIerre Maalej
MVVM par Karim PIerre Maalej
 
Retour d'experience projet AngularJS
Retour d'experience projet AngularJSRetour d'experience projet AngularJS
Retour d'experience projet AngularJS
 
WPF MVVM
WPF MVVMWPF MVVM
WPF MVVM
 
Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascript
 
Introducthion mvvm avec wpf
Introducthion mvvm avec wpfIntroducthion mvvm avec wpf
Introducthion mvvm avec wpf
 
Introduction to Rust in Production - Servo Mozilla project (Slides)
Introduction to Rust in Production - Servo Mozilla project (Slides)Introduction to Rust in Production - Servo Mozilla project (Slides)
Introduction to Rust in Production - Servo Mozilla project (Slides)
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js
 
Node.js
Node.jsNode.js
Node.js
 
L'architecture MVVM avec KnockoutJS
L'architecture MVVM avec KnockoutJSL'architecture MVVM avec KnockoutJS
L'architecture MVVM avec KnockoutJS
 
Les framework mvc
Les framework mvcLes framework mvc
Les framework mvc
 

En vedette

En vedette (20)

Madridflash tour cantos gregorianos
Madridflash tour cantos gregorianosMadridflash tour cantos gregorianos
Madridflash tour cantos gregorianos
 
Optimisation de la mesure du stress hydrique
Optimisation de la mesure du stress hydriqueOptimisation de la mesure du stress hydrique
Optimisation de la mesure du stress hydrique
 
Premières Photos Couleurs
Premières Photos CouleursPremières Photos Couleurs
Premières Photos Couleurs
 
Challenge Akka Romane Et Morgane
Challenge Akka Romane Et MorganeChallenge Akka Romane Et Morgane
Challenge Akka Romane Et Morgane
 
Olpc France L Echangeur 20090929
Olpc France L Echangeur 20090929Olpc France L Echangeur 20090929
Olpc France L Echangeur 20090929
 
La France
La FranceLa France
La France
 
Hotel meeting center
Hotel meeting centerHotel meeting center
Hotel meeting center
 
Lafrance
LafranceLafrance
Lafrance
 
calidad. el concepto y la preocupacion
calidad. el concepto y la preocupacioncalidad. el concepto y la preocupacion
calidad. el concepto y la preocupacion
 
Le costa concordia_la_mort_d'un_geant
Le costa concordia_la_mort_d'un_geantLe costa concordia_la_mort_d'un_geant
Le costa concordia_la_mort_d'un_geant
 
L\'Usine Nouvelle 17 02 11
L\'Usine Nouvelle 17 02 11L\'Usine Nouvelle 17 02 11
L\'Usine Nouvelle 17 02 11
 
Colombia pluriétnica y multicultural
Colombia pluriétnica y multiculturalColombia pluriétnica y multicultural
Colombia pluriétnica y multicultural
 
Article 1015
Article 1015Article 1015
Article 1015
 
Ciudad 292
Ciudad 292Ciudad 292
Ciudad 292
 
Paissatges
PaissatgesPaissatges
Paissatges
 
Iniciar word 2010
Iniciar word 2010Iniciar word 2010
Iniciar word 2010
 
Matar, es asesinar
Matar, es asesinarMatar, es asesinar
Matar, es asesinar
 
Voyage au paradis
Voyage au paradisVoyage au paradis
Voyage au paradis
 
Triangles5103
Triangles5103Triangles5103
Triangles5103
 
Palabras y silencio2
Palabras y silencio2Palabras y silencio2
Palabras y silencio2
 

Similaire à Softshake 2013 - Du JavaScript propre ? Challenge Accepted!

Softshake 2013 - Du JavaScript propre ? Challenge accepted!
Softshake 2013 - Du JavaScript propre ? Challenge accepted!Softshake 2013 - Du JavaScript propre ? Challenge accepted!
Softshake 2013 - Du JavaScript propre ? Challenge accepted!OCTO Technology
 
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
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiENSET, Université Hassan II Casablanca
 
Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)Cyrille Le Clerc
 
Introduction to Rust in Production - Servo Mozilla project (Talk)
Introduction to Rust in Production - Servo Mozilla project (Talk)Introduction to Rust in Production - Servo Mozilla project (Talk)
Introduction to Rust in Production - Servo Mozilla project (Talk)Quentin Frémeaux
 
M1 presentation OSGi
M1 presentation OSGiM1 presentation OSGi
M1 presentation OSGiVelossity
 
Créer et intégrer son thème PrestaShop
Créer et intégrer son thème PrestaShopCréer et intégrer son thème PrestaShop
Créer et intégrer son thème PrestaShopPrestaShop
 
RefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsRefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsOCTO Technology
 
J2eeintro
J2eeintroJ2eeintro
J2eeintromedbmb
 
Calculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stackCalculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stackCalculus System SARL
 
jQuery Mobile & Applications Web
jQuery Mobile & Applications WebjQuery Mobile & Applications Web
jQuery Mobile & Applications WebNicolas Hoffmann
 
Chap1_PresentationJava.pdf
Chap1_PresentationJava.pdfChap1_PresentationJava.pdf
Chap1_PresentationJava.pdfsayf7
 
Une introduction à Javascript
Une introduction à JavascriptUne introduction à Javascript
Une introduction à JavascriptJean Michel
 
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013MBA Multimedia
 
Connected Developper Ep2 (20 04-2013)
Connected Developper Ep2 (20 04-2013)Connected Developper Ep2 (20 04-2013)
Connected Developper Ep2 (20 04-2013)Badr Hakkari
 

Similaire à Softshake 2013 - Du JavaScript propre ? Challenge Accepted! (20)

Softshake 2013 - Du JavaScript propre ? Challenge accepted!
Softshake 2013 - Du JavaScript propre ? Challenge accepted!Softshake 2013 - Du JavaScript propre ? Challenge accepted!
Softshake 2013 - Du JavaScript propre ? Challenge accepted!
 
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
 
jQuery vs AngularJS
jQuery vs AngularJS jQuery vs AngularJS
jQuery vs AngularJS
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
 
Jquery Mobile vs Twitter Bootstrap
Jquery Mobile vs Twitter BootstrapJquery Mobile vs Twitter Bootstrap
Jquery Mobile vs Twitter Bootstrap
 
Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)
 
Introduction to Rust in Production - Servo Mozilla project (Talk)
Introduction to Rust in Production - Servo Mozilla project (Talk)Introduction to Rust in Production - Servo Mozilla project (Talk)
Introduction to Rust in Production - Servo Mozilla project (Talk)
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
M1 presentation OSGi
M1 presentation OSGiM1 presentation OSGi
M1 presentation OSGi
 
Créer et intégrer son thème PrestaShop
Créer et intégrer son thème PrestaShopCréer et intégrer son thème PrestaShop
Créer et intégrer son thème PrestaShop
 
RefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsRefCard Tests sur tous les fronts
RefCard Tests sur tous les fronts
 
J2eeintro
J2eeintroJ2eeintro
J2eeintro
 
Calculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stackCalculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stack
 
jQuery Mobile & Applications Web
jQuery Mobile & Applications WebjQuery Mobile & Applications Web
jQuery Mobile & Applications Web
 
Chap1_PresentationJava.pdf
Chap1_PresentationJava.pdfChap1_PresentationJava.pdf
Chap1_PresentationJava.pdf
 
Une introduction à Javascript
Une introduction à JavascriptUne introduction à Javascript
Une introduction à Javascript
 
CV REBAI Hamida
CV REBAI HamidaCV REBAI Hamida
CV REBAI Hamida
 
Java Server Faces - Beyond
Java Server Faces - BeyondJava Server Faces - Beyond
Java Server Faces - Beyond
 
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
 
Connected Developper Ep2 (20 04-2013)
Connected Developper Ep2 (20 04-2013)Connected Developper Ep2 (20 04-2013)
Connected Developper Ep2 (20 04-2013)
 

Plus de Romain Linsolas

Devoxx France 2015 - Développement web en 2015
Devoxx France 2015 - Développement web en 2015Devoxx France 2015 - Développement web en 2015
Devoxx France 2015 - Développement web en 2015Romain Linsolas
 
Devoxx France 2015 - Se préparer à l'arrivée d'Angular 2
Devoxx France 2015 - Se préparer à l'arrivée d'Angular 2Devoxx France 2015 - Se préparer à l'arrivée d'Angular 2
Devoxx France 2015 - Se préparer à l'arrivée d'Angular 2Romain Linsolas
 
Devoxx 2014 - JavaScript tooling - Don't be naked in front of JavaScript
Devoxx 2014 - JavaScript tooling - Don't be naked in front of JavaScriptDevoxx 2014 - JavaScript tooling - Don't be naked in front of JavaScript
Devoxx 2014 - JavaScript tooling - Don't be naked in front of JavaScriptRomain Linsolas
 
Devoxx france 2014 - Création d'un web component avec Google Polymer
Devoxx france 2014 - Création d'un web component avec Google PolymerDevoxx france 2014 - Création d'un web component avec Google Polymer
Devoxx france 2014 - Création d'un web component avec Google PolymerRomain Linsolas
 
Devoxx 2013 JavaScript Software Factory
Devoxx 2013 JavaScript Software FactoryDevoxx 2013 JavaScript Software Factory
Devoxx 2013 JavaScript Software FactoryRomain Linsolas
 
Devoxx 2012 hibernate envers
Devoxx 2012   hibernate enversDevoxx 2012   hibernate envers
Devoxx 2012 hibernate enversRomain Linsolas
 
Devoxx java script-1280-720
Devoxx java script-1280-720Devoxx java script-1280-720
Devoxx java script-1280-720Romain Linsolas
 

Plus de Romain Linsolas (8)

Devoxx France 2015 - Développement web en 2015
Devoxx France 2015 - Développement web en 2015Devoxx France 2015 - Développement web en 2015
Devoxx France 2015 - Développement web en 2015
 
Devoxx France 2015 - Se préparer à l'arrivée d'Angular 2
Devoxx France 2015 - Se préparer à l'arrivée d'Angular 2Devoxx France 2015 - Se préparer à l'arrivée d'Angular 2
Devoxx France 2015 - Se préparer à l'arrivée d'Angular 2
 
Devoxx 2014 - JavaScript tooling - Don't be naked in front of JavaScript
Devoxx 2014 - JavaScript tooling - Don't be naked in front of JavaScriptDevoxx 2014 - JavaScript tooling - Don't be naked in front of JavaScript
Devoxx 2014 - JavaScript tooling - Don't be naked in front of JavaScript
 
Devoxx france 2014 - Création d'un web component avec Google Polymer
Devoxx france 2014 - Création d'un web component avec Google PolymerDevoxx france 2014 - Création d'un web component avec Google Polymer
Devoxx france 2014 - Création d'un web component avec Google Polymer
 
Devoxx 2013 JavaScript Software Factory
Devoxx 2013 JavaScript Software FactoryDevoxx 2013 JavaScript Software Factory
Devoxx 2013 JavaScript Software Factory
 
Devoxx 2012 hibernate envers
Devoxx 2012   hibernate enversDevoxx 2012   hibernate envers
Devoxx 2012 hibernate envers
 
Devoxx test ng
Devoxx test ngDevoxx test ng
Devoxx test ng
 
Devoxx java script-1280-720
Devoxx java script-1280-720Devoxx java script-1280-720
Devoxx java script-1280-720
 

Softshake 2013 - Du JavaScript propre ? Challenge Accepted!

Notes de l'éditeur

  1. Ceci dit, en tant que dev Java, on utilise souvent des technos web, et on est automatiquement amenés à en faire.
  2. Aujourd’hui je ne fais plus de JS comme ça, il y a au moins 4 ou 5 défauts majeurs dans ce code. A l’issue de cette présentation, vous saurez les identifier. Et maintenant…
  3. Chiffre de 99% pas à jour, mais en 2010, 2% désactivés aux US
  4. Ergonomie riche, nécessite de plus en plus de choses sur le client Offline
  5. Adresser JavaScript aussi sérieusement que Java et autres
  6. Julien: &quot;parce que ce langage a un côté sale.&quot;. Romain: &quot;Je dirais plutôt surprenant&quot;…
  7. « what the fuck »
  8. C’est la dernière qui gagne. Si vous faites du chargement async, ça dépend aussi de l’âge du capitaine
  9. Où est le bug ?
  10. Rester sur le code un peu... Pourquoi c’est un pb: mes appelants dépendent trop de moi, couplage fort, changements instables. On ne fait pas toujours une API -&gt; aspect documentaire, pour moi-même ou ceux qui vont maintenir: quels sont les points d’entrée, comment on utilise cet objet counter ?
  11. Romain: “J’ai parlé de principaux problèmes avec mon application de bière. C’était facile avec un exemple de code, c’est de la triche. “ Julien: « OK mais ce n’est pas tout… »
  12. Julien: &quot;effectivement, c&apos;est surprenant comme tu dis. Et en plus ce n&apos;estpas tout…&quot;
  13. Le plus dangereux
  14. Quand on fait du JavaScript, au premier contact, ça pue. Mais quand on y a vraiment goûté, c’est pas si mal. Au début ça pue mais il faut gouter pour l’apprécier. Ca vous fait penser à quoi ce que je viens de dire ?
  15. Julien: &quot;comment coder proprement ces 100 000 lignes&quot; Romain: &quot;tu pourrais carrément éviter le JavaScript…&quot;
  16. Il existe des moyens de ne pas faire de JS. Vous connaissez sans doute... Je n’en parle pas car hors-périmètre de ma présentation. A votre dispo à la bière tout à l’heure.
  17. Google Dart = Langage orienté objet JS par Google. Ce qu&apos;aurait pu être JS si inventé aujourd&apos;hui. CoffeeScript = extension au JS pour coder proprement certaines parties répétitives. Eviter les lourdeurs du code JS
  18. Classiquement pour le côté serveur Maintenabilité, facile à tester unitairement
  19. Citer GMail
  20. Grosses applis JS ou offline -&gt; structurer le code client side en MVC
  21. Romain: &quot;Là on est sur du JS sérieux. Comment vais-je organiser mon code ?&quot; Julien: &quot;Dans d&apos;autres langages, je fais des modules&quot;…
  22. Présente une interface à ses appelants, points d’entrée bien identifiés Je ne veux pas que les appelants dépendent de trop de détails et aient un couplage trop fort avec le module. Maîtrise d’impacts de changement. Et je souhaite dire comment utiliser mon code, pour ceux qui vont le maintenir - où est le point d’entrée ?
  23. Compteur basique
  24. Packages
  25. Julien: &quot;là j&apos;ai bien architecturé mon code, mais à l&apos;intérieur des modules ce n&apos;est pas forcément propre.&quot; Romain: &quot;Justement, intéressons-nous maintenant aux solutions qui nous aident à faire du code propre »
  26. Problèmes: - checkForm: global - document.getElementById répétitif et illisible - style.display = «block» ???
  27. Qui ne connait pas jQuery ? Propre si dans fichier séparé $ et #beerForm c’est un sélecteur comme en CSS
  28. Templating: pb important dans le MVC côté client Data vient d’un appel JSON ou est stocké en local en offline. Je dois le rendre en HTML en JavaScript. 1 jeu de donnée -&gt; Plusieurs représentations
  29. Julien : &quot;OK le code est propre, mais a-t-il des bugs ? Comment je sais que je ne casse pas quelquechose en le changeant ?&quot; Pour ça, en Java, il y a les tests automatisés…
  30. D&apos;ialleurs, dans la salle, qui fait des tests automatisés en Java ? En JS ?
  31. Ce sont des tests d’intégration : lents, problématique du rejeu, difficultés de maintenance Pas prévu pour test unitaire
  32. Qui fait du TDD ? Test Driven Development En JS, on a Jasmine et QUnit
  33. Vous vous souvenez de mon compteur... Tests du contrat de mon compteur Tests incomplets... Jasmine bcp plus puissant: mocks etc. Octopod
  34. Cucumber.JS -&gt; BDD pour JS Testacular -&gt; Test Runner pour JS nécessitant NodeJS (utilisé par AngularJS) « Qui fait du test automatisé aujorud’hui ? Du TDD? »
  35. Qui fait des tests d’IHM (Selenium etc) ? Des tests unitaires (JUnit...) ? Du TDD ? La plupart d’entre-vous j’espère. Julien: &quot;OK je sais tester mon JavaScript. En Java je rejoue mes tests à chaque commit avec mon intégration continue, je m&apos;attends à la même chose en JavaScript, Romain?&quot;
  36. Qui (ne) fait (pas) de l’intégration continue ? Du Maven ? Plus un problème est détecté tard, plus il coûte cher à corriger. But principal de l’intégration continue : être averti des problèmes au plus tôt -&gt; passer des contrôles qualité sur mon logiciel, automatiquement et régulièrement
  37. Grunt -&gt; JS task runner Bower -&gt; Gestionnaire de dépendances Yeoman -&gt; Un peu le Maven du JS. Outils de construction, gestion de dépendances, exécution de tests. Utilise Grunt et Bower (entre autres)
  38. Julien
  39. Romain – C&apos;est bien tout ça Julien, je me crois dans le monde des Bisounours, tout est rose ! Julien – Non ! Attention tout de même…
  40. ... je suis plus zen avec JavaScript Mais non, je ne code pas en costard-cravate pour autant.
  41. ... je suis plus zen avec JavaScript Mais non, je ne code pas en costard-cravate pour autant.
  42. Eloquent JS: un livre gratuit en ligne, cours de JS. On est souvent un peu autodidacte, c’est bien de réviser les fondamentaux JavaScript garden: fait le point sur les features de JS et pointe les parties sales Advanced JS JavaScript the good parts: ce livre définit un sous-ensemble de JS «good» et vous fait «désapprendre» les parties sales