SlideShare une entreprise Scribd logo
Du JavaScript dans mon 
prochain projet 
Christophe Jollivet
Au Secours ! Je vais faire 
du JavaScript
Chouette ! Je vais faire 
du JavaScript
Christophe Jollivet 
• Neurobiologiste 
• Informaticien 
• Homme de communauté 
! 
• jollivetc
Sondage 
• Qui a déjà fait du JavaScript ? 
• Autrement qu’un copier-coller du web ? 
• Autrement qu’intégrer un plugin JQuery ?
JavaScript n’est pas 
Java
Java is to JavaScript 
What ham is to hamster
«JavaScript is the only 
language that people feel they 
don’t need to learn to use it» 
Doug Crockford
http://blog.movereem.nl/images/javascript-the-good-parts-the-definitive-guide.jpg
Faiblement typé
Dynamique
Prototype
Paramêtres
this 
• Function 
• Méthode 
• Constructeur 
• apply
Truthy et Falsy 
• false, "", 0, null, undefined, NaN, void sont 
FALSY 
• Tous les autres sont TRUTHY 
• même "0" et "FALSE" 
• if( array.length ) 
• if( string )
Valeur par défaut 
Attention si b vaut 0 car 0 est falsy
Appel sécurisé
Coercition de type
Coercition de type 
• Forcer le type d’une variable 
• == fait la coercition de type 
• === ne fait pas la coercition de type
Coercition de type 
• '1' ==1 TRUE 
• '1'===1 FALSE
Coercition de type 
• false == 'false' FALSE 
• false == '0' TRUE 
• " trn " == 0 TRUE 
• ",,," == new Array(4) TRUE
Coercition et 
transitivité 
• 0 =='' TRUE 
• 0 =='0' TRUE 
• ''=='0' FALSE
Coercition de type
Point virgule 
• Séparation d’expression 
• Pas toujours obligatoire 
• Pose problème dans la minification 
• Grand débat sur quand il est nécessaire
Point virgule 
https://github.com/twitter/bootstrap/issues/3057
Point virgule
Point virgule
Hoisting 
• Déplace les déclarations en tête de sa 
portée
Hoisting
Hoisting
Closure 
• Une fonction objet contient : 
• une fonction (nom, paramètres, body) 
• une référence à l’environnement où elle a 
été créée (contexte)
Closure 
•Pollution de Global 
•Risque de collision de nom 
•names est modifiable
Closure 
•Lent car construction de names à chaque appel
Closure
Asynchrone 
Et le this qui est global !
Conclusion
Il faut apprendre 
JavaScript
http://jsbooks.revolunet.com/
Du JavaScript dans mon projet
Le futur de Javascript
Ecmascript 6 
• Block Scope et Constante 
Juin 2015 
• default parameters 
• Array comprehension 
• Module : import / export 
• class extends and constructor 
• promise integration
Langages alternatifs 
• TypeScript 
• Dart 
• CoffeeScript 
• Haxe 
• Roy 
• Iced Coffee Script 
Evaluation and comparison of alternate Programming languages to JavaScript 
Aansa Ali 
Research conférence in Technical Discipline 
November, 18-22.2013 
• Live Script 
• Kaffeine 
• ParenScript 
• Fay 
• Ceylon
CoffeeScript 
• Héritage 
• List Compréhension 
• String interpolation 
• Number property lookup 
• Global variable 
• compile time checking 
• Existential Operator
Dart 
• Optionnellement typé 
• Génériques Réifiés 
• Orientation objet et Mixin 
• Big application ready : Module, librairie et 
refactorisation 
• Support de concurrence avec Isolation
TypeScript 
• Optionnellement typé 
• Type inférence 
• Orientation Objet 
• Modularisation et AMD
Du JavaScript dans mon projet
Architecture
Classique 
• Framework coté serveur 
• un système de templating pour le front
SPA + backend REST 
• Agnostic de la technologie du backend 
• cycle de vie différent
SPA Framework
Backbone 
• léger, apprentissage 
rapide 
• Communauté 
• Documentation 
• Choix nombreux 
• Pas de structure 
mais des outils 
• pas de two way 
binding 
• Dur à tester 
• Trop de choix
EmberJS 
• Convention over 
configuration 
• Integration REST et 
tests 
• Performances 
orientés 
• exemples dépassés 
• templating avec 
handlebar
AngularJS 
• two way binding 
• promise integration 
• Communauté 
• blocs structurant 
• testabilité 
• Complexité des 
directives 
• Scope hiérarchie 
• Angular Expressions 
• Beaucoup de Magie
Google Trends
Middleware framework
Middleware Framework 
• NodeJS 
• Express 
• Sails
Full Stack
Full Stack 
• Meteor 
• Derby
Usine logicielle
Usine logicielle 
• Intégration continue 
• tests 
• artefacts 
• Indicateur qualité
Build 
• Dépend du choix d’architecture et des 
technologies/frameworks 
• Deux modes 
• j’ignore l’écosystème 
• je joue le jeu
J’ignore l’écosystème 
• Mettre les JS dans Sauf ma webapp 
SPA 
• quelques plugins Maven
Je joue le jeu 
• Dépendances 
• NPM 
• BOWER 
• build : 
• Grunt 
• Gulp
NPM 
• Node Package Module 
• installation d’outils et de plugins 
• Permet l’installation d’outils de façon globale 
• Exécution de projet
NPM 
• Installation par 
• MSI 
• pkg 
• make install 
• Installeur pour Jenkins
package.json 
• Metadata du projet 
• Dépendances pour BUILD et RUN
package.json 
{ 
"name": "my-project-name", 
"version": "0.1.0", 
"scripts": { 
"start": "node .bin/www" 
} 
"dependencies": { 
"express": "~4.9.0" 
}, 
"devDependencies": { 
"grunt": "~0.4.1", 
} 
}
package.json 
• npm install 
• npm install <module> —save-dev 
• npm start
Bower
installation 
npm install -g bower
Configuration 
• bower.json 
• .bowerrc
Utilisation 
• bower install 
• bower install <package> 
• bower install <package>#<version> 
• bower list 
• bower search <keyword>
bower.json 
{ 
"name": "myApp", 
"version": "0.0.0", 
"dependencies": { 
"angular": "~1.2.3", 
"angular-route": "~1.2.3" 
}, 
"devDependencies": { 
"angular-mocks": "~1.2.3" 
}, 
"resolutions": { 
"angular": "~1.2.3" 
} 
}
Du JavaScript dans mon projet
Gruntfile.js 
module.exports = function(grunt) { 
! 
grunt.initConfig({ 
pkg: grunt.file.readJSON('package.json'), 
uglify: { 
build: { 
src: 'src/<%= pkg.name %>.js', 
dest: 'build/<%= pkg.name %>.min.js' 
} 
} 
}); 
! 
grunt.loadNpmTasks('grunt-contrib-uglify'); 
! 
grunt.registerTask('default', ['uglify']); 
! 
};
GULP
gulpfile.js 
var gulp = require('gulp'), 
uglify = require('gulp-uglify'); 
! 
gulp.task('minify', function () { 
gulp.src('js/app.js') 
.pipe(uglify()) 
.pipe(gulp.dest('build')) 
});
Intégration continue 
• Plugin fournissant Node pour Jenkins 
• Job Shell ou NodeJS Script 
• Intégration des résultats de tests
Jenkins
Qualimétrie 
• Intégration possible dans Sonar via le sonar-runner
Sonar Dashboard
Sonar Issues
Support IDE 
• Langage dynamique 
• Complétion 
• Navigation 
• Refactoring
Merci 
! 
Questions ?

Contenu connexe

KEY
Guide javascript
PDF
Javascript pour le développeur Java
PDF
JavaScript pour le développeur Java
KEY
Pourquoi et comment j'ai appris JavaScript
PDF
JavaScript pour le développeur Java
PPTX
Javascript proprement
PDF
Cours JavaScript
PPTX
Nouveautés JavaScript dans le monde Microsoft
Guide javascript
Javascript pour le développeur Java
JavaScript pour le développeur Java
Pourquoi et comment j'ai appris JavaScript
JavaScript pour le développeur Java
Javascript proprement
Cours JavaScript
Nouveautés JavaScript dans le monde Microsoft

Tendances (20)

PPTX
Les Promises en Javascript
PDF
Javascript pour les Développeurs WEB
PPTX
Javascript as a first programming language : votre IC prête pour la révolution !
PDF
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
PPTX
Javascript un langage supérieur
PPTX
Présentation de ECMAScript 6
PDF
Javascript les générateurs (generators)
PDF
Formation VBA Excel
PPTX
Une introduction à Javascript et ECMAScript 6
PPTX
TypeScript for dummies
PPTX
Présentation JavaScript
PDF
Notions de base de JavaScript
PDF
Cappuccino - ou comment créer une application web en 5 minutes
PPT
Présentation Groovy
PDF
Introduction TypeScript
PDF
Les nouveautés de Groovy 2 -- Mix-IT 2013
PDF
Introduction à scala
PPT
Kevin Avignon: Roslyn - La plateforme de compilation .NET
PDF
Présentation (brève) de scala
PPTX
Tour d’horizon de scala
Les Promises en Javascript
Javascript pour les Développeurs WEB
Javascript as a first programming language : votre IC prête pour la révolution !
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Javascript un langage supérieur
Présentation de ECMAScript 6
Javascript les générateurs (generators)
Formation VBA Excel
Une introduction à Javascript et ECMAScript 6
TypeScript for dummies
Présentation JavaScript
Notions de base de JavaScript
Cappuccino - ou comment créer une application web en 5 minutes
Présentation Groovy
Introduction TypeScript
Les nouveautés de Groovy 2 -- Mix-IT 2013
Introduction à scala
Kevin Avignon: Roslyn - La plateforme de compilation .NET
Présentation (brève) de scala
Tour d’horizon de scala
Publicité

Similaire à Du JavaScript dans mon projet (20)

PPTX
Javascript & tools
KEY
Rails 3 au Djangocong
PDF
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
PDF
Usine Logicielle 2013
PDF
Node.js et les nouvelles technologies javascript
PDF
JavaScript dans l'usine logicielle
PDF
NodeJs in real life
PDF
Angular.pdf
PPT
Formation d'architecte logiciel AFCEPF
PPTX
Vincent biret azure functions et flow (montreal)
PDF
L'Open Web en tant que pierre angulaire du développement multi-objets
PPTX
Cedric leblond migrer jenkins AWS vers Azure Devops
PPTX
Cedric leblond migrer jenkins AWS vers Azure Devops
PPTX
Migrer de Jenkins vers Azure DevOps les Builds Java
PDF
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
PDF
YLT paris js - mars 2015
PDF
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
PDF
I don't always write reactive application but when I do, it run on raspberry pi
PDF
Pourquoi rails est génial? (version longue)
Javascript & tools
Rails 3 au Djangocong
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
Usine Logicielle 2013
Node.js et les nouvelles technologies javascript
JavaScript dans l'usine logicielle
NodeJs in real life
Angular.pdf
Formation d'architecte logiciel AFCEPF
Vincent biret azure functions et flow (montreal)
L'Open Web en tant que pierre angulaire du développement multi-objets
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure Devops
Migrer de Jenkins vers Azure DevOps les Builds Java
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
YLT paris js - mars 2015
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
I don't always write reactive application but when I do, it run on raspberry pi
Pourquoi rails est génial? (version longue)
Publicité

Du JavaScript dans mon projet