SlideShare uma empresa Scribd logo
1 de 84
Baixar para ler offline
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/
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
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" 
} 
}
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 ?

Mais conteúdo relacionado

Mais procurados

Les Promises en Javascript
Les Promises en JavascriptLes Promises en Javascript
Les Promises en JavascriptBenoit Zohar
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEBAbbes Rharrab
 
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
 
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
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 
Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)Julien CROUZET
 
Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Jean-Baptiste Vigneron
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummiesMicrosoft
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScripttarkan_
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScriptKristen Le Liboux
 
Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Geeks Anonymes
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Introduction TypeScript
Introduction TypeScriptIntroduction TypeScript
Introduction TypeScriptfelixbillon
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Guillaume Laforge
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scalaSOAT
 
Kevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETKevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETMSDEVMTL
 
Présentation (brève) de scala
Présentation (brève) de scalaPrésentation (brève) de scala
Présentation (brève) de scalaclem_simon
 
Tour d’horizon de scala
Tour d’horizon de scalaTour d’horizon de scala
Tour d’horizon de scalaBenoit Wilcox
 

Mais procurados (20)

Les Promises en Javascript
Les Promises en JavascriptLes Promises en Javascript
Les Promises en Javascript
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEB
 
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 !
 
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
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 
Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)
 
Formation VBA Excel
Formation VBA ExcelFormation VBA Excel
Formation VBA Excel
 
Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummies
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScript
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScript
 
Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Introduction TypeScript
Introduction TypeScriptIntroduction TypeScript
Introduction TypeScript
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scala
 
Kevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETKevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NET
 
Présentation (brève) de scala
Présentation (brève) de scalaPrésentation (brève) de scala
Présentation (brève) de scala
 
Tour d’horizon de scala
Tour d’horizon de scalaTour d’horizon de scala
Tour d’horizon de scala
 

Semelhante a Du JavaScript dans mon projet

Javascript & tools
Javascript & toolsJavascript & tools
Javascript & toolsSlim Soussi
 
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...ALTER WAY
 
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
 
JavaScript dans l'usine logicielle
JavaScript dans l'usine logicielleJavaScript dans l'usine logicielle
JavaScript dans l'usine logiciellejollivetc
 
Formation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFFormation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFBoubker ABERWAG
 
Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)Vincent Biret
 
L'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsL'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsThomas Bassetto
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsFactoVia
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsAZUG FR
 
Migrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds JavaMigrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds JavaCédric Leblond
 
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...SOAT
 
YLT paris js - mars 2015
YLT paris js - mars 2015YLT paris js - mars 2015
YLT paris js - mars 2015gaelmetais
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...Jasmine Conseil
 
I don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piI don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piadelegue
 
Pourquoi rails est génial? (version longue)
Pourquoi rails est génial? (version longue)Pourquoi rails est génial? (version longue)
Pourquoi rails est génial? (version longue)Camille Roux
 

Semelhante a Du JavaScript dans mon projet (20)

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

Du JavaScript dans mon projet