SlideShare a Scribd company logo
1 of 30
Javascript pour les
   développeurs Java :
quels sont les pièges à éviter ?

       12h35 - 12h50 - La Seine B
Javascript pour les développeurs Java :
    quels sont les pièges à éviter ?


                  Florian Boulay
          Expert Java chez In Fine Consulting

               @FlorianBoulay
                                                27 au 29 mars 2013
Florian Boulay
    Java depuis longtemps dans de nombreux projets dans de
   grandes banques.
    Aime le beau code, les bons outils et programming, motherfucker.
                            Actuellement :
    Android, Angular JS, Scala, Mongo DB, Cassandra,
   Performance, libgdx....
Les points abordés
                                New
                 Portée     instanceof
         wrapper


Module pattern                           === vs ==
                          conversion


 Objets                        this
Portée des variables
 var foo = 'hello';

                                       Pas Jo
 function funct(){
     if(true){                                li
         var foo = 'bye';
     }
     console.log(foo);  // bye !!!!!
 }
Portée des variables
                var foo = 'hello';


          ien
                function funct(){

  C'e st b          var foo = 'bye'; // Déclaration au début
                    if(true){

                    }
                    console.log(foo);  
                }
Portée des variables
 function globalVar(){

                                  Pas Su
     bar = 'bye';
                                        per
     console.log(bar);  // bye
 }

 console.log(bar);  // bye  !!!
Portée des variables
                 function globalVar(){
                     var bar = 'bye'; // ne pas oublier var

        Mie ux
  C'est              console.log(bar);  
                 }

                 console.log(bar); // bar is not defined
Portée des variables
Ne jamais oublier le mot-clé var

La portée est uniquement liée aux fonctions
Isolation du code
 function funct(){
   var foo = 'hello';      Le Glob
   // ...               C'est l    al
 }
                               e ma l

 funct();
Isolation du code : module pattern
                 (function(){

   'isolat ion       var foo = 'hello';
  L                  // ...
        st bon
    C'e          })();

                 // En : module pattern
                 // Fr : fonction anonyme auto appelante
Module Pattern : variante
                  var module = (function () {


     psulat ion     var exposedObject = {},


  nca
                       privateVariable = 1;

 E                  function privateMethod() {
                      // méthode privée
                    }

                    exposedObject.publicProperty = true;
                    exposedObject.publicMethod = function () {
                       // méthode exposée
                    };

                    return exposedObject;
                  }());

                  module.publicMethod();
Isolation du code
Isoler du code est facile en Javascript une fois que l'on
connaît mieux les fonctions.

Le module pattern doit être utilisé au maximum pour ne
pas exposer le code privé
Terminé le code au niveau global
Objets
var obj1 = new Object();     // objet ?
obj1.funct = function(){
                                          Confus
  return 'me' ;
}
var obj2 =  {                // objet ?
                                                 i on
  funct : function() {
     return 'me';
  }
}
var obj3 = function(arg) {   // objet ?
  this.funct = function() {
     return arg ;
  }
}
obj1.funct();         // ?
obj2.funct();         // ?
obj2['funct']();      // ? 
var instance = new obj3('me') ;
instance.funct();     // ?
Objets
                  var obj =  {
         simple
 Reste r            prop : true,             
                    funct : function() {
                      return 'me';
                    }
                  }
New
                                                      Compo
var inst1 = new ApiObject();  // on fait comme ça ?

var inst2 = ApiObject();      // ou comme ça ?
                                                            rteme
                                                       innate     nt
// ­­­­­­­­­­­­­­­­ //
                                                              ndu
var MyObject = function() {
  this.bar = 'mux';
}

var oops = new MyObject();   // ??
var yipp = MyObject();       // ??
New
            var inst = new ApiObject(); 

  Moua is   // Règle tacite : si la fonction 
            commence par une majuscule elle doit 
            être initialisé avec un new

            // lire la doc

            // Si utilisation de this dans une 
            fonction, faire un new (= 
            constructeur)
This
var MyObject = function() {

                                     Niak
  this.bar = 'devoxx';
}

var oops = new MyObject();   // ??
var yipp = MyObject();       // ??

this.cheese = 'camembert';   // ?
This
                var MyObject = function() {

         oi ?
                  this.bar = 'devoxx';


 Alors qu       }

                var oops = new MyObject();   
                console.log(oops.bar);         // devoxx


                var yipp = MyObject();
                console.log(bar);              // devoxx

                // même chose qu'au dessus
                this.cheese = 'camembert'; 

                // this dépend du contexte d'appel
Objets
New n'est pas le passage obligé pour créer un objet

Un objet est une fonction aussi


This n'est pas votre ami
==
'' == '0'                 // false
0 == ''                   // true
                                     Gneee
0 == '0'                  // true 

false == 'false'          // false
                                           e ?
false == '0'              // true

false == undefined        // false
false == null             // false
null == undefined         // true
' trn ' == 0           // true
==
     Facile
              ===
instanceof vs typeof
var foo = 'mit mit';

                                  Shepa
typeof foo ;             // ?
foo instanceof String;   // ?

var bar = new String('vroum') ;
typeof bar ;             // ?
bar instanceof String;   // ?
instanceof vs typeof
                   typeof 3;  // « number »
       plusclair   typeof 'niak'; // « string »
C' est             3 instanceof Number;  // false

                   var me = new String('me');
                   me instanceof String; // true
                   typeof me ; // « object »
Types wrapper
var obj = new Object();
var arr = new Array();
                                beurk
var num = new Number(42);
var str = new String('42'); 

var bool = new Boolean(true);
var regex = new RegExp('.*');
Types wrapper
            var obj = {};

      upi
            var arr = []
   Yo       var num = 42;
            var str = '42'; 

            var bool = true;
            var regex = /.*'/;
Convertir un texte en nombre
parseInt('123');                   // ?
parseInt('123HelloDevoxx');        // ?   Ah oua
parseInt('123');                   // ?
parseInt('123HelloDevoxx', 10);    // ?
                                                is ?
parseInt('0123HelloDevoxx', 8);    // ?
Convertir un texte en nombre
             parseInt('123');                   // 123


   Hum. ..   parseInt('123HelloDevoxx');        // 123
             parseInt('123HelloDevoxx', 10);    // 123
             parseInt('0123HelloDevoxx', 8);    // 83

             // ­­­­­­­­­­­­­­­­­ //

             +'123'                 // 123
             +'123HelloDevoxx'      // NaN
             +'0123HelloDevoxx'     // NaN
A vous désormais
Javascript contient quelques erreurs de
design mais reste simple
Java est mainstream côté serveur, Javascript l'est côté client

Excellent livre : Javascript the good parts
Merci à tous
Test disponible sur le stand
  http://codinfine.com
                               27 au 29 mars 2013

More Related Content

What's hot

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
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryneuros
 
Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Yannick Chartois
 
L'API Collector dans tous ses états
L'API Collector dans tous ses étatsL'API Collector dans tous ses états
L'API Collector dans tous ses étatsJosé Paumard
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoftdavrous
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...MICHRAFY MUSTAFA
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScripttarkan_
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronestchappui
 
Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la viecluelessjoe
 
Javascript Json artchitecture
Javascript  Json artchitecture Javascript  Json artchitecture
Javascript Json artchitecture zaghir
 
JavaScript pour les développeurs .NET
JavaScript pour les développeurs .NETJavaScript pour les développeurs .NET
JavaScript pour les développeurs .NETThomas Conté
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptMicrosoft Technet France
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech daysJean-Pierre Vincent
 
Formation python micro club.net
Formation python micro club.netFormation python micro club.net
Formation python micro club.netZakaria SMAHI
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech daysJean-Pierre Vincent
 

What's hot (20)

Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8
 
L'API Collector dans tous ses états
L'API Collector dans tous ses étatsL'API Collector dans tous ses états
L'API Collector dans tous ses états
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Cours javascript v1
Cours javascript v1Cours javascript v1
Cours javascript v1
 
La programmation fonctionnelle en javascript / PF
La programmation fonctionnelle en javascript / PFLa programmation fonctionnelle en javascript / PF
La programmation fonctionnelle en javascript / PF
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoft
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScript
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
 
Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la vie
 
Javascript Json artchitecture
Javascript  Json artchitecture Javascript  Json artchitecture
Javascript Json artchitecture
 
JavaScript pour les développeurs .NET
JavaScript pour les développeurs .NETJavaScript pour les développeurs .NET
JavaScript pour les développeurs .NET
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScript
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 
Formation python micro club.net
Formation python micro club.netFormation python micro club.net
Formation python micro club.net
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 

Viewers also liked

Magellan Partners - Valoriser l’expérience client et augmenter la rentabilité...
Magellan Partners - Valoriser l’expérience client et augmenter la rentabilité...Magellan Partners - Valoriser l’expérience client et augmenter la rentabilité...
Magellan Partners - Valoriser l’expérience client et augmenter la rentabilité...Magellan Consulting
 
Magellan Consulting > "Comment préparer son calendrier réglementaire Solvabil...
Magellan Consulting > "Comment préparer son calendrier réglementaire Solvabil...Magellan Consulting > "Comment préparer son calendrier réglementaire Solvabil...
Magellan Consulting > "Comment préparer son calendrier réglementaire Solvabil...Magellan Consulting
 
Comparing Java Web Frameworks
Comparing Java Web FrameworksComparing Java Web Frameworks
Comparing Java Web FrameworksMatt Raible
 
Comparison of Java Web Application Frameworks
Comparison of Java Web Application FrameworksComparison of Java Web Application Frameworks
Comparison of Java Web Application FrameworksAngelin R
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVCNathaniel Richand
 
2. nacimiento de la axiomática
2. nacimiento de la axiomática2. nacimiento de la axiomática
2. nacimiento de la axiomáticahenry0124
 
Presentación secon life
Presentación secon lifePresentación secon life
Presentación secon lifeMacuen
 
Etude de l’accessibilité numérique des portails de bibliothèque en France : a...
Etude de l’accessibilité numérique des portails de bibliothèque en France : a...Etude de l’accessibilité numérique des portails de bibliothèque en France : a...
Etude de l’accessibilité numérique des portails de bibliothèque en France : a...Franck Letrouvé
 
Insuficiencia mitral y estenosis mitral
Insuficiencia mitral y estenosis mitralInsuficiencia mitral y estenosis mitral
Insuficiencia mitral y estenosis mitralPatricio Jaramillo
 
Proyecto de vida
Proyecto de vidaProyecto de vida
Proyecto de vidacamiloyaren
 
Portfolio de Guillermo Figurelli
Portfolio de Guillermo FigurelliPortfolio de Guillermo Figurelli
Portfolio de Guillermo Figurelliguillermodomingo
 
Corrida de toros
Corrida de torosCorrida de toros
Corrida de torosmilvern
 
Observatoire de l'epub - 8ème edition - SRI - Cap Gemini - Juillet 2012
Observatoire de l'epub - 8ème edition - SRI - Cap Gemini - Juillet 2012Observatoire de l'epub - 8ème edition - SRI - Cap Gemini - Juillet 2012
Observatoire de l'epub - 8ème edition - SRI - Cap Gemini - Juillet 2012Ad6 Media
 
SGAR Franche-Comté - Évaluation tic synthèse (version juin 2009)
SGAR Franche-Comté - Évaluation tic synthèse (version juin 2009)SGAR Franche-Comté - Évaluation tic synthèse (version juin 2009)
SGAR Franche-Comté - Évaluation tic synthèse (version juin 2009)Silicon Comté
 
Dubai otromundo
Dubai otromundoDubai otromundo
Dubai otromundomudival
 
Determinación de la densidad de los cuerpos
Determinación de la densidad de los cuerposDeterminación de la densidad de los cuerpos
Determinación de la densidad de los cuerposgrillonegro1
 

Viewers also liked (20)

Magellan Partners - Valoriser l’expérience client et augmenter la rentabilité...
Magellan Partners - Valoriser l’expérience client et augmenter la rentabilité...Magellan Partners - Valoriser l’expérience client et augmenter la rentabilité...
Magellan Partners - Valoriser l’expérience client et augmenter la rentabilité...
 
Magellan Consulting > "Comment préparer son calendrier réglementaire Solvabil...
Magellan Consulting > "Comment préparer son calendrier réglementaire Solvabil...Magellan Consulting > "Comment préparer son calendrier réglementaire Solvabil...
Magellan Consulting > "Comment préparer son calendrier réglementaire Solvabil...
 
Java Framework comparison
Java Framework comparisonJava Framework comparison
Java Framework comparison
 
Comparing Java Web Frameworks
Comparing Java Web FrameworksComparing Java Web Frameworks
Comparing Java Web Frameworks
 
Comparison of Java Web Application Frameworks
Comparison of Java Web Application FrameworksComparison of Java Web Application Frameworks
Comparison of Java Web Application Frameworks
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
 
Las energías
Las energíasLas energías
Las energías
 
2. nacimiento de la axiomática
2. nacimiento de la axiomática2. nacimiento de la axiomática
2. nacimiento de la axiomática
 
Presentación secon life
Presentación secon lifePresentación secon life
Presentación secon life
 
Etude de l’accessibilité numérique des portails de bibliothèque en France : a...
Etude de l’accessibilité numérique des portails de bibliothèque en France : a...Etude de l’accessibilité numérique des portails de bibliothèque en France : a...
Etude de l’accessibilité numérique des portails de bibliothèque en France : a...
 
Insuficiencia mitral y estenosis mitral
Insuficiencia mitral y estenosis mitralInsuficiencia mitral y estenosis mitral
Insuficiencia mitral y estenosis mitral
 
Pps nuevas tecnologias
Pps nuevas tecnologiasPps nuevas tecnologias
Pps nuevas tecnologias
 
Proyecto de vida
Proyecto de vidaProyecto de vida
Proyecto de vida
 
Portfolio de Guillermo Figurelli
Portfolio de Guillermo FigurelliPortfolio de Guillermo Figurelli
Portfolio de Guillermo Figurelli
 
Corrida de toros
Corrida de torosCorrida de toros
Corrida de toros
 
Observatoire de l'epub - 8ème edition - SRI - Cap Gemini - Juillet 2012
Observatoire de l'epub - 8ème edition - SRI - Cap Gemini - Juillet 2012Observatoire de l'epub - 8ème edition - SRI - Cap Gemini - Juillet 2012
Observatoire de l'epub - 8ème edition - SRI - Cap Gemini - Juillet 2012
 
Juan Felipe Garcia
Juan Felipe GarciaJuan Felipe Garcia
Juan Felipe Garcia
 
SGAR Franche-Comté - Évaluation tic synthèse (version juin 2009)
SGAR Franche-Comté - Évaluation tic synthèse (version juin 2009)SGAR Franche-Comté - Évaluation tic synthèse (version juin 2009)
SGAR Franche-Comté - Évaluation tic synthèse (version juin 2009)
 
Dubai otromundo
Dubai otromundoDubai otromundo
Dubai otromundo
 
Determinación de la densidad de los cuerpos
Determinación de la densidad de los cuerposDeterminación de la densidad de los cuerpos
Determinación de la densidad de los cuerpos
 

Similar to Javascript pour les développeurs Java : quels sont les pièges à éviter ?

Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJean-Pierre Vincent
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHPjulien pauli
 
JavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentauxJavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentauxVincent Petetin
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScriptKristen Le Liboux
 
Javascript #2 : valeurs, types & opérateurs
Javascript #2 : valeurs, types & opérateursJavascript #2 : valeurs, types & opérateurs
Javascript #2 : valeurs, types & opérateursJean Michel
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSSAyoubElmrabet6
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5julien pauli
 
Eléments syntaxiques du langage java-Jihen HEDHLI
Eléments syntaxiques du langage java-Jihen HEDHLIEléments syntaxiques du langage java-Jihen HEDHLI
Eléments syntaxiques du langage java-Jihen HEDHLIJihenHedhli1
 
Future of java script web version
Future of java script web versionFuture of java script web version
Future of java script web versionSébastien Pertus
 
Javascript : que fait ce code?
Javascript : que fait ce code?Javascript : que fait ce code?
Javascript : que fait ce code?Ruau Mickael
 
Javascript objet : que fait ce code ?
Javascript objet : que fait ce code ?Javascript objet : que fait ce code ?
Javascript objet : que fait ce code ?Ruau Mickael
 

Similar to Javascript pour les développeurs Java : quels sont les pièges à éviter ? (20)

Les bases du javascript
Les bases du javascriptLes bases du javascript
Les bases du javascript
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
JavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentauxJavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentaux
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScript
 
Python + ansible = ♥
Python + ansible = ♥Python + ansible = ♥
Python + ansible = ♥
 
Cours tp2
Cours tp2Cours tp2
Cours tp2
 
Javascript #2 : valeurs, types & opérateurs
Javascript #2 : valeurs, types & opérateursJavascript #2 : valeurs, types & opérateurs
Javascript #2 : valeurs, types & opérateurs
 
Cours php
Cours phpCours php
Cours php
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
 
Cours java script
Cours java scriptCours java script
Cours java script
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5
 
Eléments syntaxiques du langage java-Jihen HEDHLI
Eléments syntaxiques du langage java-Jihen HEDHLIEléments syntaxiques du langage java-Jihen HEDHLI
Eléments syntaxiques du langage java-Jihen HEDHLI
 
Future of java script web version
Future of java script web versionFuture of java script web version
Future of java script web version
 
Javascript : que fait ce code?
Javascript : que fait ce code?Javascript : que fait ce code?
Javascript : que fait ce code?
 
Javascript objet : que fait ce code ?
Javascript objet : que fait ce code ?Javascript objet : que fait ce code ?
Javascript objet : que fait ce code ?
 
La première partie de la présentation PHP
La première partie de la présentation PHPLa première partie de la présentation PHP
La première partie de la présentation PHP
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 

Javascript pour les développeurs Java : quels sont les pièges à éviter ?

  • 1. Javascript pour les développeurs Java : quels sont les pièges à éviter ? 12h35 - 12h50 - La Seine B
  • 2. Javascript pour les développeurs Java : quels sont les pièges à éviter ? Florian Boulay Expert Java chez In Fine Consulting @FlorianBoulay 27 au 29 mars 2013
  • 3. Florian Boulay Java depuis longtemps dans de nombreux projets dans de grandes banques. Aime le beau code, les bons outils et programming, motherfucker. Actuellement : Android, Angular JS, Scala, Mongo DB, Cassandra, Performance, libgdx....
  • 4. Les points abordés New Portée instanceof wrapper Module pattern === vs == conversion Objets this
  • 5. Portée des variables var foo = 'hello'; Pas Jo function funct(){     if(true){ li         var foo = 'bye';     }     console.log(foo);  // bye !!!!! }
  • 6. Portée des variables var foo = 'hello'; ien function funct(){ C'e st b     var foo = 'bye'; // Déclaration au début     if(true){     }     console.log(foo);   }
  • 7. Portée des variables function globalVar(){ Pas Su     bar = 'bye'; per     console.log(bar);  // bye } console.log(bar);  // bye  !!!
  • 8. Portée des variables function globalVar(){     var bar = 'bye'; // ne pas oublier var Mie ux C'est     console.log(bar);   } console.log(bar); // bar is not defined
  • 9. Portée des variables Ne jamais oublier le mot-clé var La portée est uniquement liée aux fonctions
  • 10. Isolation du code function funct(){   var foo = 'hello'; Le Glob   // ... C'est l al } e ma l funct();
  • 11. Isolation du code : module pattern (function(){ 'isolat ion   var foo = 'hello'; L     // ... st bon C'e })(); // En : module pattern // Fr : fonction anonyme auto appelante
  • 12. Module Pattern : variante var module = (function () { psulat ion var exposedObject = {}, nca privateVariable = 1; E function privateMethod() { // méthode privée } exposedObject.publicProperty = true; exposedObject.publicMethod = function () { // méthode exposée }; return exposedObject; }()); module.publicMethod();
  • 13. Isolation du code Isoler du code est facile en Javascript une fois que l'on connaît mieux les fonctions. Le module pattern doit être utilisé au maximum pour ne pas exposer le code privé Terminé le code au niveau global
  • 14. Objets var obj1 = new Object();     // objet ? obj1.funct = function(){ Confus   return 'me' ; } var obj2 =  {                // objet ? i on funct : function() { return 'me';   } } var obj3 = function(arg) {   // objet ? this.funct = function() { return arg ;   } } obj1.funct();         // ? obj2.funct();         // ? obj2['funct']();      // ?  var instance = new obj3('me') ; instance.funct();     // ?
  • 15. Objets var obj =  { simple Reste r   prop : true,                funct : function() {   return 'me';   } }
  • 16. New Compo var inst1 = new ApiObject();  // on fait comme ça ? var inst2 = ApiObject();      // ou comme ça ? rteme innate nt // ­­­­­­­­­­­­­­­­ // ndu var MyObject = function() {   this.bar = 'mux'; } var oops = new MyObject();   // ?? var yipp = MyObject();       // ??
  • 17. New var inst = new ApiObject();  Moua is // Règle tacite : si la fonction  commence par une majuscule elle doit  être initialisé avec un new // lire la doc // Si utilisation de this dans une  fonction, faire un new (=  constructeur)
  • 18. This var MyObject = function() { Niak   this.bar = 'devoxx'; } var oops = new MyObject();   // ?? var yipp = MyObject();       // ?? this.cheese = 'camembert';   // ?
  • 19. This var MyObject = function() { oi ?   this.bar = 'devoxx'; Alors qu } var oops = new MyObject();    console.log(oops.bar);         // devoxx var yipp = MyObject(); console.log(bar);              // devoxx // même chose qu'au dessus this.cheese = 'camembert';  // this dépend du contexte d'appel
  • 20. Objets New n'est pas le passage obligé pour créer un objet Un objet est une fonction aussi This n'est pas votre ami
  • 21. == '' == '0'                 // false 0 == ''                   // true Gneee 0 == '0'                  // true  false == 'false'          // false e ? false == '0'              // true false == undefined        // false false == null             // false null == undefined         // true ' trn ' == 0           // true
  • 22. == Facile ===
  • 23. instanceof vs typeof var foo = 'mit mit'; Shepa typeof foo ;             // ? foo instanceof String;   // ? var bar = new String('vroum') ; typeof bar ;             // ? bar instanceof String;   // ?
  • 24. instanceof vs typeof typeof 3;  // « number » plusclair typeof 'niak'; // « string » C' est 3 instanceof Number;  // false var me = new String('me'); me instanceof String; // true typeof me ; // « object »
  • 25. Types wrapper var obj = new Object(); var arr = new Array(); beurk var num = new Number(42); var str = new String('42');  var bool = new Boolean(true); var regex = new RegExp('.*');
  • 26. Types wrapper var obj = {}; upi var arr = [] Yo var num = 42; var str = '42';  var bool = true; var regex = /.*'/;
  • 27. Convertir un texte en nombre parseInt('123');                   // ? parseInt('123HelloDevoxx');        // ? Ah oua parseInt('123');                   // ? parseInt('123HelloDevoxx', 10);    // ? is ? parseInt('0123HelloDevoxx', 8);    // ?
  • 28. Convertir un texte en nombre parseInt('123');                   // 123 Hum. .. parseInt('123HelloDevoxx');        // 123 parseInt('123HelloDevoxx', 10);    // 123 parseInt('0123HelloDevoxx', 8);    // 83 // ­­­­­­­­­­­­­­­­­ // +'123'                 // 123 +'123HelloDevoxx'      // NaN +'0123HelloDevoxx'     // NaN
  • 29. A vous désormais Javascript contient quelques erreurs de design mais reste simple Java est mainstream côté serveur, Javascript l'est côté client Excellent livre : Javascript the good parts
  • 30. Merci à tous Test disponible sur le stand http://codinfine.com 27 au 29 mars 2013