Du JavaScript dans mon projet

84
Du JavaScript dans mon prochain projet Christophe Jollivet

description

Presentation about the starting my next project in JavaScript

Transcript of Du JavaScript dans mon projet

Page 1: Du JavaScript dans mon projet

Du JavaScript dans mon prochain projet

Christophe Jollivet

Page 2: Du JavaScript dans mon projet

Au Secours ! Je vais faire du JavaScript

Page 3: Du JavaScript dans mon projet

Chouette ! Je vais faire du JavaScript

Page 4: Du JavaScript dans mon projet

Christophe Jollivet

• Neurobiologiste

• Informaticien

• Homme de communauté

!

• jollivetc

Page 5: Du JavaScript dans mon projet

Sondage

• Qui a déjà fait du JavaScript ?

• Autrement qu’un copier-coller du web ?

• Autrement qu’intégrer un plugin JQuery ?

Page 6: Du JavaScript dans mon projet

JavaScript n’est pas Java

Page 7: Du JavaScript dans mon projet

Java is to JavaScript

What ham is to hamster

Page 8: Du JavaScript dans mon projet

«JavaScript is the only language that people feel they don’t need to learn to use it» Doug Crockford

Page 9: Du JavaScript dans mon projet

http://blog.movereem.nl/images/javascript-the-good-parts-the-definitive-guide.jpg

Page 10: Du JavaScript dans mon projet

Faiblement typé

Page 11: Du JavaScript dans mon projet

Dynamique

Page 12: Du JavaScript dans mon projet

Prototype

Page 13: Du JavaScript dans mon projet

Paramêtres

Page 14: Du JavaScript dans mon projet

this

• Function

• Méthode

• Constructeur

• apply

Page 15: Du JavaScript dans mon projet

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 )

Page 16: Du JavaScript dans mon projet

Valeur par défaut

Attention si b vaut 0 car 0 est falsy

Page 17: Du JavaScript dans mon projet

Appel sécurisé

Page 18: Du JavaScript dans mon projet

Coercition de type

Page 19: Du JavaScript dans mon projet

Coercition de type

• Forcer le type d’une variable

• == fait la coercition de type

• === ne fait pas la coercition de type

Page 20: Du JavaScript dans mon projet

Coercition de type

• '1' ==1 TRUE

• '1'===1 FALSE

Page 21: Du JavaScript dans mon projet

Coercition de type

• false == 'false' FALSE

• false == '0' TRUE

• " \t\r\n " == 0 TRUE

• ",,," == new Array(4) TRUE

Page 22: Du JavaScript dans mon projet

Coercition et transitivité

• 0 =='' TRUE

• 0 =='0' TRUE

• ''=='0' FALSE

Page 23: Du JavaScript dans mon projet

Coercition de type

Page 24: Du JavaScript dans mon projet

Point virgule

• Séparation d’expression

• Pas toujours obligatoire

• Pose problème dans la minification

• Grand débat sur quand il est nécessaire

Page 25: Du JavaScript dans mon projet

Point virgule

https://github.com/twitter/bootstrap/issues/3057

Page 26: Du JavaScript dans mon projet

Point virgule

Page 27: Du JavaScript dans mon projet

Point virgule

Page 28: Du JavaScript dans mon projet

Hoisting

• Déplace les déclarations en tête de sa portée

Page 29: Du JavaScript dans mon projet

Hoisting

Page 30: Du JavaScript dans mon projet

Hoisting

Page 31: Du JavaScript dans mon projet

Closure

• Une fonction objet contient :

• une fonction (nom, paramètres, body)

• une référence à l’environnement où elle a été créée (contexte)

Page 32: Du JavaScript dans mon projet

Closure

•Pollution de Global •Risque de collision de nom •names est modifiable

Page 33: Du JavaScript dans mon projet

Closure

•Lent car construction de names à chaque appel

Page 34: Du JavaScript dans mon projet

Closure

Page 35: Du JavaScript dans mon projet

Asynchrone

Et le this qui est global !

Page 36: Du JavaScript dans mon projet

Conclusion

Page 37: Du JavaScript dans mon projet

Il faut apprendre JavaScript

Page 38: Du JavaScript dans mon projet

http://jsbooks.revolunet.com/

Page 39: Du JavaScript dans mon projet
Page 40: Du JavaScript dans mon projet

Le futur de Javascript

Page 41: Du JavaScript dans mon projet

Ecmascript 6• Block Scope et Constante

• default parameters

• Array comprehension

• Module : import / export

• class extends and constructor

• promise integration

Juin 2015

Page 42: Du JavaScript dans mon projet

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

Page 43: Du JavaScript dans mon projet

CoffeeScript• Héritage

• List Compréhension

• String interpolation

• Number property lookup

• Global variable

• compile time checking

• Existential Operator

Page 44: Du JavaScript dans mon projet

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

Page 45: Du JavaScript dans mon projet

TypeScript

• Optionnellement typé

• Type inférence

• Orientation Objet

• Modularisation et AMD

Page 46: Du JavaScript dans mon projet
Page 47: Du JavaScript dans mon projet

Architecture

Page 48: Du JavaScript dans mon projet

Classique

• Framework coté serveur

• un système de templating pour le front

Page 49: Du JavaScript dans mon projet

SPA + backend REST

• Agnostic de la technologie du backend

• cycle de vie différent

Page 50: Du JavaScript dans mon projet

SPA Framework

Page 51: Du JavaScript dans mon projet

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

Page 52: Du JavaScript dans mon projet

EmberJS

• Convention over configuration

• Integration REST et tests

• Performances orientés

• exemples dépassés

• templating avec handlebar

Page 53: Du JavaScript dans mon projet

AngularJS

• two way binding

• promise integration

• Communauté

• blocs structurant

• testabilité

• Complexité des directives

• Scope hiérarchie

• Angular Expressions

• Beaucoup de Magie

Page 54: Du JavaScript dans mon projet

Google Trends

Page 55: Du JavaScript dans mon projet

Middleware framework

Page 56: Du JavaScript dans mon projet

Middleware Framework

• NodeJS

• Express

• Sails

Page 57: Du JavaScript dans mon projet

Full Stack

Page 58: Du JavaScript dans mon projet

Full Stack

• Meteor

• Derby

Page 59: Du JavaScript dans mon projet

Usine logicielle

Page 60: Du JavaScript dans mon projet

Usine logicielle

• Intégration continue

• tests

• artefacts

• Indicateur qualité

Page 61: Du JavaScript dans mon projet

Build

• Dépend du choix d’architecture et des technologies/frameworks

• Deux modes

• j’ignore l’écosystème

• je joue le jeu

Page 62: Du JavaScript dans mon projet

J’ignore l’écosystème

• Mettre les JS dans ma webapp

• quelques plugins MavenSauf SPA

Page 63: Du JavaScript dans mon projet

Je joue le jeu• Dépendances

• NPM

• BOWER

• build :

• Grunt

• Gulp

Page 64: Du JavaScript dans mon projet

NPM

• Node Package Module

• installation d’outils et de plugins

• Permet l’installation d’outils de façon globale

• Exécution de projet

Page 65: Du JavaScript dans mon projet

NPM

• Installation par

• MSI

• pkg

• make install

• Installeur pour Jenkins

Page 66: Du JavaScript dans mon projet

package.json

• Metadata du projet

• Dépendances pour BUILD et RUN

Page 67: Du JavaScript dans mon projet

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", }}

Page 68: Du JavaScript dans mon projet

package.json

• npm install

• npm install <module> —save-dev

• npm start

Page 69: Du JavaScript dans mon projet

Bower

Page 70: Du JavaScript dans mon projet

installation

npm install -g bower

Page 71: Du JavaScript dans mon projet

Configuration

• bower.json

• .bowerrc

Page 72: Du JavaScript dans mon projet

Utilisation

• bower install

• bower install <package>

• bower install <package>#<version>

• bower list

• bower search <keyword>

Page 73: Du JavaScript dans mon projet

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" }}

Page 74: Du JavaScript dans mon projet
Page 75: Du JavaScript dans mon projet

Gruntfile.jsmodule.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']);!};

Page 76: Du JavaScript dans mon projet

GULP

Page 77: Du JavaScript dans mon projet

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'))});

Page 78: Du JavaScript dans mon projet

Intégration continue

• Plugin fournissant Node pour Jenkins

• Job Shell ou NodeJS Script

• Intégration des résultats de tests

Page 79: Du JavaScript dans mon projet

Jenkins

Page 80: Du JavaScript dans mon projet

Qualimétrie

• Intégration possible dans Sonar via le sonar-runner

Page 81: Du JavaScript dans mon projet

Sonar Dashboard

Page 82: Du JavaScript dans mon projet

Sonar Issues

Page 83: Du JavaScript dans mon projet

Support IDE

• Langage dynamique

• Complétion

• Navigation

• Refactoring

Page 84: Du JavaScript dans mon projet

Merci !

Questions ?