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 :

Quelles sont les nouvelles fonctionnalités qui pourraient débarquer dans JavaScript en 2019 ?


Sujet :

JavaScript

  1. #1
    Chroniqueur Actualités
    Avatar de Michael Guilloux
    Homme Profil pro
    Data Consultant
    Inscrit en
    Juillet 2013
    Messages
    2 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Data Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 2 875
    Points : 86 930
    Points
    86 930
    Billets dans le blog
    2
    Par défaut Quelles sont les nouvelles fonctionnalités qui pourraient débarquer dans JavaScript en 2019 ?
    Quelles sont les nouvelles fonctionnalités qui pourraient débarquer dans JavaScript en 2019 ?
    Tour d’horizon des candidats pour ES2019

    JavaScript est un langage de programmation de scripts principalement employé dans les pages web interactives, mais aussi pour les serveurs avec l'utilisation par exemple de Node.js. C'est un langage orienté objet à prototype et qui supporte le paradigme objet, impératif et fonctionnel. Il a été standardisé sous le nom d'ECMAScript en juin 1997 par Ecma International dans le standard ECMA-262. JavaScript n'est depuis qu'une implémentation d'ECMAScript (ES), celle mise en œuvre par la fondation Mozilla.

    Au cours des dernières années, JavaScript a évolué à un rythme soutenu avec de nouvelles fonctionnalités de langage apportées à la spécification ECMAScript suivant un processus normalisé avec 5 étapes de maturité : idée (étape 0), proposition formelle (étape 1), brouillon (étape 2), candidat (étape 3) et approuvé (étape 4).

    Le groupe Ecma International qui examine et adopte les modifications apportées aux spécifications du langage est le Technical Committee 39, ou TC39. Il travaille actuellement sur les nouvelles fonctionnalités à intégrer à ES2019. Pour le moment, aucune nouvelle fonctionnalité n'a atteint l'étape 4, mais quelques-unes sont déjà candidates pour la spécification ES2019, c'est-à-dire à l'étape 3. Ce qui permet donc de se faire une idée plus ou moins juste des fonctionnalités de langage qui pourraient débarquer dans JavaScript cette année. Et David Neal, Senior Developer Advocate chez Okta et spécialiste de la communauté JavaScript (y compris Node.js et les frameworks front-end populaires tels que React et Vue), a pris soin de les répertorier pour nous.


    Modifications apportées aux classes JavaScript

    Un certain nombre de modifications ont été proposées aux classes, notamment les déclarations de champ, les méthodes et champs privés et les méthodes et champs statiques. Voici un exemple de ce à quoi ces changements pourraient ressembler.

    Code JavaScript : 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
     
    class Truck extends Automobile {
      model = "Heavy Duty"; // public field declaration
      #numberOfSeats = 5; // private field declaration
      #isCrewCab = true;
      static #name = "Truck"; // static private field declaration
     
      // static method
      static formattedName() {
        // Notice that the Truck class name is used
        // to access the static field instead of "this"
        return `This vehicle is a ${ Truck.#name }.`;
      }
      constructor( model, seats = 2 ) {
        super();
        this.seats = seats;
      }
     
      // Private method
      #getBodyType() {
        return this.#isCrewCab ? "Crew Cab" : "Standard Cab";
      }
      bodyType() {
        return `${ this.#numberOfSeats }-passenger ${ this.model } ${ this.#getBodyType() }`;
      }
      get seats() { return this.#numberOfSeats; }
      set seats( value ) {
        if ( value >= 1 && value < 7 ) {
          this.#numberOfSeats = value;
          this.#isCrewCab = value > 3;
        }
      }
    }

    Pour sa part, David Neal n’aime pas le fait que la syntaxe hash (#) soit utilisée pour les membres privés. Il dit qu'il aurait préféré que la spécification du langage JavaScript adopte le mot-clé private à cette fin, comme dans les autres langages.

    Méthodes trimStart() et trimEnd() pour le type String

    Le type String type a une méthode trim() qui supprime les blancs à la fois au début et à la fin d'une chaîne de caractères. Les nouvelles méthodes trimStart() et trimEnd() proposées pourraient apporter plus de contrôle sur la suppression d'espace vide.

    La méthode trimStart() permet de retirer les blancs au début de la chaîne de caractères. trimLeft() est un synonyme pour cette méthode.

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var str = "   toto  ";
    console.log(str.length); // 8
    str = str.trimStart();
    console.log(str.length); // 5
    console.log(str);        // "toto  "

    De la même manière, la méthode trimEnd() permet de retirer les blancs situés à la fin d'une chaîne de caractères. trimRight() est un synonyme pour cette méthode.

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var str = "   toto  ";
    console.log(str.length); // 9
    str = str.trimEnd();
    console.log(str.length); // 7
    console.log(str);        // "   toto"

    Ci-dessous, un exemple combinant trimStart et trimEnd :

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    const one = "      hello and let ";
    const two = "us begin.        ";
    console.log( one.trimStart() + two.trimEnd() ) // "hello and let us begin."

    trimStart et trimEnd ne modifient pas la chaîne elle-même. L'intérêt de cette fonctionnalité de langage est qu'elle est déjà implémentée dans un certain nombre de moteurs JavaScript. C'est l'un des nombreux cas où les navigateurs aident à faire avancer le langage.

    Les grands nombres avec BigInt

    BigInt est un objet natif qui permet de représenter des nombres entiers supérieurs à 253 (la plus grande valeur entière qui puisse être représentée par le type Number). Un objet BigInt est créé en ajoutant un n à la fin d'un littéral d'entier — 10n par exemple — ou en appelant la fonction BigInt().

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    const plusGrandEntier = 9007199254740991n;
    const grandNombre = BigInt(9007199254740991);
    // ↪ 9007199254740991n
     
    const grandNombreEnChaîne = BigInt('9007199254740991');
    // ↪ 9007199254740991n
     
    const grandeNombreHexa = BigInt("0x1fffffffffffff");
    // ↪ 9007199254740991n
     
    const grandeNombreBinaire = BigInt("0b11111111111111111111111111111111111111111111111111111");
    // ↪ 9007199254740991n

    Tableaux plats avec flat() et flatMap()

    La méthode flat() permet de créer un nouveau tableau contenant les éléments des sous-tableaux du tableau passé en argument, qui sont concaténés récursivement pour atteindre une profondeur donnée. Dans les exemples ci-dessous, on aplatit des tableaux imbriqués avec flat().

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var arr1 = [1, 2, [3, 4]];
    arr1.flat(); 
    // [1, 2, 3, 4]
     
    var arr2 = [1, 2, [3, 4, [5, 6]]];
    arr2.flat();
    // [1, 2, 3, 4, [5, 6]]
     
    var arr3 = [1, 2, [3, 4, [5, 6]]];
    arr3.flat(2);
    // [1, 2, 3, 4, 5, 6]

    La méthode flat() permet également de retirer les « trous » d'un tableau :

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var arr4 = [1, 2, , 4, 5];
    arr4.flat();
    // [1, 2, 4, 5]

    La méthode flatMap() permet d'appliquer une fonction à chaque élément du tableau puis d'aplatir le résultat en un tableau. Cela correspond à l'enchaînement de Array.prototype.map() suivi de Array.prototype.flat() de profondeur 1. flatMap est plus efficace que la combinaison de ces deux opérations, souvent réalisées conjointement.

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var arr1 = [1, 2, 3, 4];
    arr1.map(x => [x * 2]); 
    // [[2], [4], [6], [8]]
     
    arr1.flatMap(x => [x * 2]);
    // [2, 4, 6, 8]
     
    // seul un niveau est aplati
    arr1.flatMap(x => [[x * 2]]);
    // [[2], [4], [6], [8]]

    On peut utiliser un autre exemple où on génère une liste de mots à partir d'une liste de phrases :

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    let tableau1 = ["Coucou comment", "", "ça va ?"];
    tableau1.map(x => x.split(" "));
    // [["Coucou", "comment"], [""], ["ça", "va", "?"]]
     
    tableau1.flatMap(x => x.split(" "));
    // ["Coucou", "comment", "", "ça", "va", "?"]


    Autres fonctionnalités candidates

    Parmi les autres fonctionnalités candidates (étape 3), on peut noter :
    • globalThis, qui offre un mécanisme universel d'accéder à l'objet global même dans des fonctions strict ou des modules, quelle que soit la plateforme ;
    • import() dynamique ;
    • des fonctionnalités RegExp legacy ;
    • l'objet import.meta, une métapropriété qui expose des métadonnées d'un module JavaScript spécifiques au contexte. Cet objet contient des informations à propos du module, telles que l'URL du module ;
    • matchAll() pour le type String ;
    • Object.fromEntries(), une nouvelle méthode statique pour transformer une liste de paires clé-valeur en un objet ;
    • une proposition visant à empêcher JSON.stringify de retourner des chaînes mal formées ; et
    • hashbang (#!) pour les applications CLI.

    Depuis quelques années, le TC39 a régulièrement publié de nouvelles éditions de la spécification de langage ECMAScript en juin. Il est donc très probable que la spécification ES2019 soit publiée en juin 2019. Pour ceux qui veulent expérimenter ces fonctionnalités de langage candidates, certaines sont déjà disponibles dans les moteurs et les utilitaires JavaScript. Ces nouvelles fonctionnalités sont parfois désactivées par défaut, mais peuvent être configurées pour être utilisées. Vous pourrez notamment les tester avec la dernière version de Node.js ou avec Babel 7.0+.

    Rappelons que jusqu'à ce qu'une fonctionnalité de langage atteigne l'étape 4, rien ne garantit qu'elle fera partie de la spécification officielle d'ECMAScript. Toutefois, les implémentations de moteur JavaScript, telles que V8 (utilisée par Chrome et Node.js) et SpiderMonkey de Firefox, peuvent ajouter une prise en charge expérimentale des fonctionnalités proposées avant d’atteindre la phase 4, afin que les développeurs puissent tester et fournir des commentaires.

    Sources : David Neal, Mozilla MDN (pour la plupart des exemples de code)

    Et vous ?

    Que pensez-vous des fonctionnalités candidates pour la spécification ES2019 ?
    Lesquelles appréciez-vous le plus ou le moins ? Et pourquoi ?
    Avez-vous repéré d'autres fonctionnalités candidates ES2019 ? Si oui, lesquelles ?
    Quelles fonctionnalités présentes dans d'autres langages ou pas attendiez-vous pour la prochaine version de JavaScript ? Pourquoi ?
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  2. #2
    Membre extrêmement actif
    Avatar de Sodium
    Femme Profil pro
    Développeuse web
    Inscrit en
    Avril 2014
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeuse web

    Informations forums :
    Inscription : Avril 2014
    Messages : 2 324
    Points : 2 006
    Points
    2 006
    Billets dans le blog
    1
    Par défaut
    Pour sa part, David Neal n’aime pas le fait que la syntaxe hash (#) soit utilisée pour les membres privés. Il dit qu'il aurait préféré que la spécification du langage JavaScript adopte le mot-clé private à cette fin, comme dans les autres langages.
    En effet... il y a toujours eu chez JavaScript cette politique du comment faire simple quand on peut avoir une syntaxe bizarre difficilement compréhensible pour une personne extérieure au langage.

  3. #3
    Invité
    Invité(e)
    Par défaut
    On repart déjà pour 4 pages de Sodium VS JavaScript ou on attend trolldi?

  4. #4
    Membre extrêmement actif
    Avatar de Sodium
    Femme Profil pro
    Développeuse web
    Inscrit en
    Avril 2014
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeuse web

    Informations forums :
    Inscription : Avril 2014
    Messages : 2 324
    Points : 2 006
    Points
    2 006
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Mrsky Voir le message
    On repart déjà pour 4 pages de Sodium VS JavaScript ou on attend trolldi?
    Boah non, déclarations de champs, méthodes et champs privés... ça commence à ressembler à un vrai langage, je n'ai pas trop à critiquer pour une fois

  5. #5
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 872
    Points : 3 716
    Points
    3 716
    Par défaut
    Citation Envoyé par Sodium Voir le message
    En effet... il y a toujours eu chez JavaScript cette politique du comment faire simple quand on peut avoir une syntaxe bizarre difficilement compréhensible pour une personne extérieure au langage.
    Oui le mot clé "private" serait plus clair/lisible pour l'utilisateur mais je crois que c'est plus difficile à prendre en compte coté outils d'assistance...

    Par exemple un IDE lors d'une auto-complétion pourrait facilement filtrer les suggestions (proposées par les outils actuels) de sorte à ne proposer que ce qui n'est pas privé (que ce qui ne commence pas par un "#" ou un "_" ou autre selon la convention adoptée), il n'y aurait pas besoin par exemple d'avoir un tokeniser/parser qui tienne compte du mot clé "private"...

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    développeur sénior
    Inscrit en
    Septembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : développeur sénior

    Informations forums :
    Inscription : Septembre 2012
    Messages : 9
    Points : 26
    Points
    26
    Par défaut
    je trouve, au contraire de mes camarades, la notation # plutôt intelligente: avec un seul caractère, on identifie tout de suite la portée de la variable où qu'elle soit utilisée. Nul besoin de convention d'écriture. D'autre part, ça rend la déclaration moins verbeuse.

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 690
    Points : 20 211
    Points
    20 211
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Oui le mot clé "private" serait plus clair/lisible pour l'utilisateur mais je crois que c'est plus difficile à prendre en compte coté outils d'assistance...

    Par exemple un IDE lors d'une auto-complétion pourrait facilement filtrer les suggestions (proposées par les outils actuels) de sorte à ne proposer que ce qui n'est pas privé (que ce qui ne commence pas par un "#" ou un "_" ou autre selon la convention adoptée), il n'y aurait pas besoin par exemple d'avoir un tokeniser/parser qui tienne compte du mot clé "private"...
    N'importe quel ide sait déjà gérer les mots clé de visibilité dans tous les autre langages.
    Cela à encore moins de sens qu'il utilise le mot clé static.
    Quitte à vouloir faire originale , autant être consistent dans les idées à la con
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #variable_privee;
    @variable_static;
    Typescript propose plein de chose intéressante , il ferait bien de s'en inspirer un peu.

    Citation Envoyé par psancho Voir le message
    je trouve, au contraire de mes camarades, la notation # plutôt intelligente: avec un seul caractère, on identifie tout de suite la portée de la variable où qu'elle soit utilisée. Nul besoin de convention d'écriture. D'autre part, ça rend la déclaration moins verbeuse.
    Perso je préfère écrire private une fois que devoir me traîner un # sur toutes les utilisations de la variable , ce qui, à mon sens , est autrement plus lourd.

    Les conventions d'écriture sur les visibilités ou les types c'était bien y'a 15 ans quand les ide n'était pas au niveau où il sont maintenant. Ça fait un paquet d'années que je préfixe plus mes variables et ça ne m'a jamais poser le moindre problème , justement parce que les ide sont capables de gérer tout ça correctement à ma place.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 872
    Points : 3 716
    Points
    3 716
    Par défaut
    Citation Envoyé par grunk Voir le message
    N'importe quel ide sait déjà gérer les mots clé de visibilité dans tous les autre langages.
    Comme tu dis toi-même : "dans tous les autre langages" mais là on parle de JS et les outils pour JS ne prennent pas (encore) en compte le mot clé "private"...

    Faire évoluer ces outils est quand même plus difficile que de faire ce que je disais à savoir : Lors d'une auto-complétion un IDE pourrait facilement filtrer les suggestions (proposées par les outils actuels) de sorte à ne proposer que ce qui n'est pas privé (que ce qui ne commence pas par un "#" ou un "_" ou autre selon la convention adoptée).

    Les outils pour les autres langages ne peuvent pas servir pour JS mais si quelqu'un pense le contraire cela m’intéresse qu'on m'explique comment on peut faire ça...

  9. #9
    Membre extrêmement actif
    Avatar de Sodium
    Femme Profil pro
    Développeuse web
    Inscrit en
    Avril 2014
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeuse web

    Informations forums :
    Inscription : Avril 2014
    Messages : 2 324
    Points : 2 006
    Points
    2 006
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Comme tu dis toi-même : "dans tous les autre langages" mais là on parle de JS et les outils pour JS ne prennent pas (encore) en compte le mot clé "private"... .
    Eh bien il faut faire évoluer les outils plutôt que de faire régresser le langage...

  10. #10
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 690
    Points : 20 211
    Points
    20 211
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Comme tu dis toi-même : "dans tous les autre langages" mais là on parle de JS et les outils pour JS ne prennent pas (encore) en compte le mot clé "private"...
    Des ide comme webstorm ou vscode le gère déjà avec typescript. Ils devrait être capable de s'en sortir avec du JS

    Faire évoluer ces outils est quand même plus difficile que de faire ce que je disais à savoir : Lors d'une auto-complétion un IDE pourrait facilement filtrer les suggestions (proposées par les outils actuels) de sorte à ne proposer que ce qui n'est pas privé (que ce qui ne commence pas par un "#" ou un "_" ou autre selon la convention adoptée).
    Pour faire se filtrage , il va falloir dans tous les cas une màj de l'ide.
    Et puis comme il vont supporter le mot clé static , il pourrait très bien supporter private en même temps.

    Y'a peut être une vraie bonne raison derrière ce choix , mais faciliter la vie aux ide n'en est pas une.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 872
    Points : 3 716
    Points
    3 716
    Par défaut
    Citation Envoyé par Sodium Voir le message
    Eh bien il faut faire évoluer les outils plutôt que de faire régresser le langage...
    Ce n'est pas si simple... Qui va le faire ? Et est-ce que cela sera gratuit et open source ?

    Bon je pense que ceux qui travaillent sur TypeScript le feront peut-être, les outils pour TS fonctionnent aussi pour JS, j'ai d'ailleurs testé tsserver mais franchement ce n'est pas facile à utiliser car la documentation est rare, j'ai dû regarder l'intégration faite par d'autres pour essayer de comprendre...

    Sur certains points je trouve que tern est plus efficace que tsserver mais hélas tern n'est plus maintenu par son auteur mais peut-être qu'il fera quand même évoluer le parseur Acorn (dont il est aussi l'auteur)...

  12. #12
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 872
    Points : 3 716
    Points
    3 716
    Par défaut
    ah nos message se sont croisés..

    Citation Envoyé par grunk Voir le message
    Pour faire se filtrage , il va falloir dans tous les cas une màj de l'ide.
    Mais ce filtrage est facile à faire, ce n'est pas difficile d'analyser toutes les suggestions pour écarter toutes celles qui commencent par un caractère donné.

    Par contre faire évoluer un parser (et les outils qui l'utiliseront) ce n'est pas à la porté de tout le monde...

    Citation Envoyé par grunk Voir le message
    Et puis comme il vont supporter le mot clé static , il pourrait très bien supporter private en même temps.
    "static" existe déjà, non ?

    Citation Envoyé par grunk Voir le message
    Des ide comme webstorm ou vscode le gère déjà avec typescript. Ils devrait être capable de s'en sortir avec du JS
    Oui c'est vrai, comme je disais aussi je pense qu'ils le feront et en plus on peut intégrer ces outils ailleurs, d'ailleurs c'est déjà le cas même en Java avec Eclipse par exemple...

  13. #13
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 460
    Points : 6 064
    Points
    6 064
    Par défaut
    Citation Envoyé par Michael Guilloux Voir le message
    Au cours des dernières années, JavaScript a évolué à un rythme soutenu avec de nouvelles fonctionnalités de langage apportées à la spécification ECMAScript suivant un processus normalisé avec 5 étapes de maturité : idée (étape 0), proposition formelle (étape 1), brouillon (étape 2), candidat (étape 3) et approuvé (étape 4).
    Pour ceux que ça intéresse, voici la liste des propositions d'ajouts de fonctionnalités : ECMAScript proposals.

    Remarque : parmi les fonctionnalités qui sont encore en stage 2, il y a déjà un support pour les décorateurs dans Babel et dans TypeScript (depuis TypeScript 1.5).
    Rq : je n'ai pas encore testé.

  14. #14
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 690
    Points : 20 211
    Points
    20 211
    Par défaut
    J'ai pas tout lu mais à priori l'utilisation de private est problématique car

    si je déclare un champs :
    et que plus loin je fait

    Je ne ferais pas référence à mon membre privé mais à un membre toto publique qui serait implicitement crée ... Ce qui est clairement pas idéal.

    il faudrait alors plutôt écrire quelque chose comme
    Ce que je trouve toujours plus élégant que this.#toto = 0 mais ça reste personnel.

    Si j'ai bien compris c'est le genre de truc qui renforce tout le bien que je pense de JS

    https://github.com/tc39/proposal-pri...hods/issues/28
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Membre à l'essai
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Parfait cette annonce, moi qui débute en JS et en Python

  16. #16
    Membre extrêmement actif
    Avatar de Sodium
    Femme Profil pro
    Développeuse web
    Inscrit en
    Avril 2014
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeuse web

    Informations forums :
    Inscription : Avril 2014
    Messages : 2 324
    Points : 2 006
    Points
    2 006
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par grunk Voir le message
    J'ai pas tout lu mais à priori l'utilisation de private est problématique car
    ...
    https://github.com/tc39/proposal-pri...hods/issues/28
    Pour le moment c'est le seul moyen d'initialiser une propriété de classe en JavaScript. Peut-être qu'ensuite ils modifieront pour qu'on ne puisse pas utiliser une variable non initialisée en mode strict.
    Mais bon, ça reste très secondaire à mon avis, une classe bien conçue a suffisament peu de variables pour ne pas se planter.

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 39
    Points
    39
    Par défaut
    Je pensais que l'utilisation de # au lieu de private c'était pour permettre une retrocompatibilité avec les transpileurs comme babel.

    Par exemple si je fais ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class A {
       #name = null;
     
       constructor(name) {
          this.#name = name
       }
    }
    Alors un outil comme babel sera capable de savoir si une utilisation du champs est incorrecte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    let a = new A("Joseph");
    a.#name = "Interdit"; // Ici l'utilisation de #name est incorrect
    Si on utilise private à la définition au lieu d'un token à l'utilisation, alors les outils comme babel ne seront pas en mesure de vérifier les potentiels usages incorrects.

  18. #18
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 690
    Points : 20 211
    Points
    20 211
    Par défaut
    Pour continuer sur les raisons du pourquoi du # : https://github.com/tc39/proposal-cla..._SYNTAX_FAQ.md

    Moralité , je suis pas prêt de laisser tomber typescript pour me remettre à du vanilla js ...

    J'ai quand même l'impression qu'on essai de faire avancer JS dans le bon sens , mais que c'est tout simplement pas prévu pour et que du coup on en vient à ce genre de truc qui ressemble plus à du bricolage qu' à autre chose (à mon sens)
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  19. #19
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 460
    Points : 6 064
    Points
    6 064
    Par défaut
    Je viens de lire un article intéressant de Nick Fitzgerald de 2014 sur les différentes manières de simuler les membres privés en JavaScript :
    Hiding Implementation Details with ECMAScript 6 WeakMaps

    La méthode privilégiée présentée par l'auteur est d'utiliser un WeakMap, mais c'est du bricolage :
    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
    const privates = new WeakMap();
     
    function Public() {
      const me = {
        // Private data goes here
      };
      privates.set(this, me);
    }
     
    Public.prototype.method = function () {
      const me = privates.get(this);
      // Do stuff with private data in `me`...
    };
     
    module.exports = Public;
    Une caractéristique de WeakMap est qu'il n'empêche pas les objets pointés par les clefs de se faire détruire par le GC.

  20. #20
    Membre extrêmement actif
    Avatar de Sodium
    Femme Profil pro
    Développeuse web
    Inscrit en
    Avril 2014
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeuse web

    Informations forums :
    Inscription : Avril 2014
    Messages : 2 324
    Points : 2 006
    Points
    2 006
    Billets dans le blog
    1
    Par défaut
    J'ai vomi.

    Bref, comme je le dis toujours, on peut développer à peu près n'importe quoi avec n'importe quel langage tout comme l'on peut avec assez d'acharnement abattre un arbre avec une cuiller, mais pas forcément de manière pratique ni élégante.

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/10/2017, 11h41
  2. Réponses: 3
    Dernier message: 27/03/2015, 18h42
  3. Quelles sont les nouvelles technologies en vogue ?
    Par Steph0 dans le forum Actualités
    Réponses: 0
    Dernier message: 21/04/2010, 17h41
  4. quelles sont les SSII qui font du forfait
    Par coax81 dans le forum SSII
    Réponses: 11
    Dernier message: 12/10/2007, 15h49
  5. [phpBB] Quelles sont les fonctionnalités d'administration
    Par psychoBob dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 11
    Dernier message: 22/06/2006, 14h16

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