IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

L'assemblée générale Ecma International a annoncé l'approbation d'ECMAScript 6


Sujet :

JavaScript

  1. #21
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par SylvainPV Voir le message
    Une syntaxe qui ne t'obligerait pas à déclarer un constructeur quand tu n'en as pas besoin, qui ne fout pas en l'air ton code quand tu oublies new pour une instanciation, et qui te permet de faire de l'héritage multiple. Une syntaxe comme Proto, Stampit ou ObjectModel. As-tu lu mon dernier article ? Le chapitre IX me semble fort à propos.
    Déclarer explicitement un constructeur n'a jamais été obligatoire (du moins pour le C++ et Java).
    "qui ne fout pas en l'air ton code quand tu oublies new"... j'ai lâché un petit sourire à la lecture de cette phrase Le mot-clé new rime avec instanciation. Pour un développeur C++ mettre un new et ne pas en mettre a toute une signification (pile et tas). Et puis comment peux-t-on "oublier" d'ajouter un mot-clé comme ça ?
    Pour ce qui est de l'héritage multiple, jusqu'à présent j'ai travaillé sur de gros projets de A à Z sans jamais en avoir réellement besoin grâce aux design patterns de comportement.

    Oui j'ai lu ton article, mais il y a certaines choses dont je ne suis pas forcément d'accord :
    parce que la programmation objet orientée prototype fait le même boulot en mieux
    C'est ton point de vue Sylvain, et tu as peut-être raison... mais sa syntaxe n'est guère intuitive, qu'on vienne du monde orienté objet ou pas.

    L'héritage en JavaScript est tellement facile qu'il rend confus les gens qui s'attendent à ce que cela demande des efforts. Pour le rendre plus difficile, nous avons ajouté « class ».
    Je ne sais pas de qui vient cette citation (Brendan Eich ?) ... il a mangé un clown ou deux j'en suis sûre.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  2. #22
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    L'article est une traduction d'un billet d'Eric Elliott, je n'ai fait que traduire ses propos.

    En JS, les classes sont des constructeurs. La syntaxe class n'est qu'une décoration autour de l'opérateur new, qui expose les constructeurs à l'utilisateur et non les prototypes. Ce choix a été fait soi-disant pour rendre la syntaxe plus intuitive, mais si tu demandes à un développeur JS amateur quelle est la différence entre constructor.prototype et Object.getPrototypeOf(constructor), il sera bien incapable de te répondre. Donc il y a toujours un constructeur à partir du moment où tu utilises new, même si tu ne renseignes pas de fonction constructor dans le corps de ta classe. D'ailleurs, une classe sans cette propriété pourrait être considérée comme un simple recueil de fonctions vu que l'on doit forcément passer par le constructeur pour renseigner les propriétés de données.

    Concernant le mot-clé new, je l'ai déjà vu plusieurs fois oublié et cela donne des bugs très difficiles à déceler, parce qu'aucune exception n'est levée du fait que le code reste valide. Et les débutants ne comprennent pas pourquoi parfois on doit l'utiliser et parfois non, il y a eu déjà plusieurs topics ouverts sur les forums de Developpez à ce sujet. Pour ne rien arranger, certains objets built-in comme Array peuvent être utilisés avec ou sans new, et beaucoup de bibliothèques JavaScript utilisent des fonctions usine et non des constructeurs. Par exemple tu n'utilises pas new pour construire un objet jQuery ou pour déclarer un modèle Backbone.

    Bref, c'est la jungle et tout ceci aurait pu être évité si NetScape n'avait pas demandé à Eich de déguiser son LiveScript en Java-like. Ils ont accordé trop d'importance à la syntaxe au mépris des concepts fondamentaux du langage. Ce n'est pas moi qui le dit, mais le créateur du langage lui-même. Si ça fait de nous des "puristes", je sais pas trop comment je dois appeler les autres. Parfois j'ai l'impression de les voir se servir d'un tournevis comme d'un marteau.
    One Web to rule them all

  3. #23
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Un avantage des classes ES6, la construction de classes dérivées des objets natifs (Array, Date, etc).

    Exemple avec Date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
    <script>
        "use strict";
     
        /*
         * Fonctionne uniquement en ES6 natif.
         * Fonctionne dans Chrome version 43.0.2357.124 m
         * Mais pas avec traceur.js puisqu'il produit du code ES5.
         */ 
        const
            kIsoFormat = d3.time.format( "%Y-%m-%dT%H:%M:%S.%L%Z" ),
            dvjhDate = class extends Date {
                constructor( p ){
                    if ( p ) {
                        super( p );
                    } else {
                        super();
                    }
     
                    this.auteur = 'Daniel Hagnoul';
                }
                toString(){
                    return kIsoFormat( this );
                }
            };
     
        let
            date1 = new dvjhDate(),
            date2 = new dvjhDate( "08/08/1950" ),
            date3 = new dvjhDate( "2015-06-22T00:30:00.000-0500" );
     
        console.log( date1 );
        console.log( date2 );
        console.log( date3 );
    </script>

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  4. #24
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Ce sont les classes anonymes. Il y en aura aussi en PHP 7. C'est présent dans Java depuis la version 1.1 (février 1997). Comme quoi il y a des choses qui reviennent à la mode.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  5. #25
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Logique, les classes sont des fonctions, et les fonctions peuvent être anonymes en JS. Rien n'a changé de ce côté là.
    One Web to rule them all

Discussions similaires

  1. Google annonce la disponibilité générale de son service Cloud SQL
    Par Stéphane le calme dans le forum Cloud Computing
    Réponses: 0
    Dernier message: 21/02/2014, 11h55
  2. ECMA International adopte JSON comme standard
    Par Stéphane le calme dans le forum Actualités
    Réponses: 10
    Dernier message: 22/10/2013, 00h12
  3. ECMA International ratifie la norme JavaScript ECMA-262 Edition 5.1
    Par Hinault Romaric dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 16/07/2011, 17h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo