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 :

La version candidate d'ECMAScript 2020 est disponible avec l'ensemble des fonctionnalités finales


Sujet :

JavaScript

  1. #1
    Chroniqueur Actualités

    Homme Profil pro
    Rédacteur technique
    Inscrit en
    juin 2016
    Messages
    2 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : juin 2016
    Messages : 2 034
    Points : 45 751
    Points
    45 751
    Par défaut La version candidate d'ECMAScript 2020 est disponible avec l'ensemble des fonctionnalités finales
    La version candidate d'ECMAScript 2020 est disponible avec l'ensemble des fonctionnalités finales,
    dont l'opérateur de coalescence nulle (??) et de chaînage optionnel (?.)

    Jeudi dernier, la version candidate d'ECMAScript 2020 est sortie avec l'ensemble des fonctionnalités finales de cette version. Rappelons que JavaScript est un langage de programmation basé sur la spécification ECMAScript. Les langages tels que ActionScript, JavaScript, JScript et TypeScript utilisent tous ECMAScript comme noyau. Les fonctionnalités ECMAScript sont conçues indépendamment et passent par des étapes, commençant de 0 (« paille »), se terminant à 4 (« terminé »). Ecma TC39 est le comité responsable de l'évolution du langage de programmation ECMAScript et de la rédaction de la spécification. Voici un aperçu des fonctionnalités d'ES2020 (propositions de l'étape 4) approuvé par le TC39 le 2 avril dernier :

    BigInt

    BigInt est un objet intégré qui fournit un moyen de représenter des nombres entiers supérieurs à 2⁵³ — 1, qui est le plus grand nombre de JS. JavaScript peut désormais représenter de manière fiable au-delà du type primitif "Number" et pas seulement au maximum à 9007199254740992. Un BigInt est créé en ajoutant n à l'entier (ex. 5n) Ou en appelant BigInt(). BigInt est similaire à Number, mais diffère de plusieurs manières. Il ne peut pas être utilisé avec des méthodes d'objet intégré comme dans Math. BigInt ne peut pas être combiné avec une instance d'opérations de Number. Ils ne peuvent être utilisés qu'avec d'autres variables BigInt sauf si elles sont converties. La proposition consiste à ajouter un nouveau type primitif pour les gros caractères à JavaScript. Étant donné que les entiers implicites (indices de tableau, etc.) continueront d'exister séparément, ils seront appelés BigInt.

    import()

    Jusqu'à présent, la seule façon d'importer un module a été via une instruction "import". Cette déclaration a plusieurs limites. Vous devez l'utiliser au niveau supérieur d'un module. Autrement dit, vous ne pouvez pas, par exemple, importer quelque chose lorsque vous êtes à l'intérieur d'un bloc ; le spécificateur de module est toujours fixe. Autrement dit, vous ne pouvez pas modifier ce que vous importez en fonction d'une condition. Et vous ne pouvez pas assembler un spécificateur dynamiquement. L'opérateur import() change cela. Il renvoie une promesse pour l'objet d'espace de noms de module du module demandé. Par conséquent, les importations peuvent désormais être affectées à une variable à l'aide de async / wait.

    Promise.allSettled ()

    Ceci est une autre méthode pour les promesses qui vérifie si toutes les promesses qui sont créées ont été réglées. La différence entre promise.all() et promise.allSettled() est promise.all() résolu uniquement si toutes les promesses sont résolues avec succès et sans erreur. Si une promesse est rejetée, .all() elle ne sera pas résolue. D'un autre côté, promise.allSettled() sera réglé même si la promesse est résolue ou rejetée.


    L'opérateur de chaînage optionnel (?.)

    Lors de la recherche d'une valeur de propriété au plus profond d'une structure arborescente, il faut souvent vérifier si des nœuds intermédiaires existent. De plus, de nombreuses API renvoient un objet ou null / undefined, et on peut vouloir extraire une propriété du résultat uniquement quand il n'est pas null. L'opérateur de chaînage optionnel permet à un développeur de gérer bon nombre de ces cas sans se répéter et/ou affecter des résultats intermédiaires dans des variables temporaires. Lorsqu'une autre valeur que celle undefined souhaitée pour le cas manque, cela peut généralement être géré avec l'opérateur de coalescence nulle.

    L'opérateur de coalescence nulle (??)

    Lors de l'exécution des accès aux propriétés, il est souvent souhaité de fournir une valeur par défaut si le résultat de cet accès aux propriétés est null ou undefined. À l'heure actuelle, une façon typique d'exprimer cette intention en JavaScript consiste à utiliser l'opérateur ||. Cela fonctionne bien pour le cas commun des valeurs null et undefined, mais il existe un certain nombre de valeurs fausses qui pourraient produire des résultats inattendus comme dans le cas ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    const response = {   
        settings: {     
            nullValue: null,     
            height: 400,     
            animationDuration: 0,     
            headerText: '',     
            showSplashScreen: false
        } 
    };
    const headerText = response.settings.headerText || 'Hello, world!';
    const animationDuration = response.settings.animationDuration || 300;
    const showSplashScreen = response.settings.showSplashScreen || true;
    L'opérateur de coalescence nulle est destiné à mieux gérer ces cas et sert de contrôle d'égalité par rapport aux valeurs null ou undefined.

    Source : ECMAScript 2020

    Et vous ?

    Que pensez-vous des nouveautés d'ECMAScript 2020 ?

    Voir aussi

    ECMAScript 2017 : Ecma International annonce les nouvelles mises à jour de ses spécifications, pour les langages de script

    Tutoriel présentant les nouveautés ECMAScript 6

    Introduction à PHP 7, ECMASCRIPT 6 et VUE.JS par l'exemple, un tutoriel de Serge Tahé

    ECMAScript 2016 : des mises à jour plus petites et plus fréquentes pour l'ensemble de normes des langages de script
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  2. #2
    Membre éprouvé
    Homme Profil pro
    chomeur
    Inscrit en
    avril 2015
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : chomeur
    Secteur : Distribution

    Informations forums :
    Inscription : avril 2015
    Messages : 614
    Points : 1 277
    Points
    1 277
    Par défaut
    les langages on cherche a tous maitriser par des mots afin de balayer toutes les possibilite meme si elles sont rares quitte a augmenter l'apprentissage et par effet de ricochet a complexifier ce même apprentissage faisant de plus en plus appel a la mémoire, sans oublier les symboles qui peuvent tout faire et complexifie la lecture du code.
    Plus vite encore plus vite toujours plus vite.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    février 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : février 2012
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    les langages on cherche a tous maitriser par des mots afin de balayer toutes les possibilite meme si elles sont rares quitte a augmenter l'apprentissage et par effet de ricochet a complexifier ce même apprentissage faisant de plus en plus appel a la mémoire, sans oublier les symboles qui peuvent tout faire et complexifie la lecture du code.
    Je dirai même plus:
    Quoi qu'on dise concernant l'inertie contextuelle, il ne faut pas négliger d'anticiper l'ensemble des options que nous connaissons, parce que nous ne faisons plus le même métier.

  4. #4
    Membre éprouvé
    Homme Profil pro
    chomeur
    Inscrit en
    avril 2015
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : chomeur
    Secteur : Distribution

    Informations forums :
    Inscription : avril 2015
    Messages : 614
    Points : 1 277
    Points
    1 277
    Par défaut
    je trouve tout de même étrange de voir ce que j'arrive a faire avec une simple boucle for et de simple if et que je voit des code faisant la même chose utilisant l'artillerie lourde pour plus complexe plus technique plus classsss et au finale le rendu est pareil voir moins bien.
    Plus vite encore plus vite toujours plus vite.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Noob
    Inscrit en
    octobre 2009
    Messages
    443
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Noob

    Informations forums :
    Inscription : octobre 2009
    Messages : 443
    Points : 1 630
    Points
    1 630
    Par défaut
    Je sais pas de quelle complexité tu parles, ces opérateurs existent aujourd'hui dans pas mal de langages et ne sont pas plus compliqués à comprendre que l'opérateur ternaire.

    Ça permet justement de limiter le nombre de ifs dans le code, et donc d'améliorer la lisibilité tout en passant par des constructions de langage qui, on peut espérer, sont plus efficaces (moins gourmands lors de l’exécution).

  6. #6
    Membre expérimenté Avatar de dfiad77pro
    Homme Profil pro
    (Ingénieur dev.) lead technique
    Inscrit en
    décembre 2008
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : (Ingénieur dev.) lead technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2008
    Messages : 521
    Points : 1 647
    Points
    1 647
    Par défaut
    moins gourmand je suis pas sur si le dev fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    const c1= pere?.fils?.petitFils[0];
    const c2= pere?.fils?.petitFils[1];
    const c3= pere?.fils?.petitFils[2];
    dans ce cas , le test de nullité est exécuté plusieurs fois pour rien. Et sur de gros volumes ça se ressent. Et ce n'est pas que le cas en JS, en C# aussi faut faire attention.

  7. #7
    Expert confirmé Avatar de Zefling
    Homme Profil pro
    Développeur Web
    Inscrit en
    avril 2007
    Messages
    1 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : avril 2007
    Messages : 1 117
    Points : 4 321
    Points
    4 321
    Par défaut
    Citation Envoyé par dfiad77pro
    dans ce cas , le test de nullité est exécuté plusieurs fois pour rien. Et sur de gros volumes ça se ressent. Et ce n'est pas que le cas en JS, en C# aussi faut faire attention.
    Je voyais des trucs du genre avec jQuery :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $('#element').css( "background-color", "red" );
    $('#element').css( "color", "blue" );
    $('#element').addClass("myClass" );
    Si tu sais pas ce que tu fais, quelque soit le langage, l'API, le framework, ça risque d'être assez horrible niveau perf.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Noob
    Inscrit en
    octobre 2009
    Messages
    443
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Noob

    Informations forums :
    Inscription : octobre 2009
    Messages : 443
    Points : 1 630
    Points
    1 630
    Par défaut
    Pour l'opérateur de coalescence nulle, aujourd'hui en JS pur si tu veux faire propre tu dois faire un truc comme "if (x === null || x === undefined) {}" pour vérifier l'existence d'une valeur car si tu utilises "||" tu vas avoir tous les faux positifs du JS qui posent problème. Quand je parle de gourmand on est dans de la micro optimisation, quand le parser voit "if (expr)" il doit évaluer l'expression alors que quand il verra "??" il saura déjà comment le traduire.

    Clairement ca change pas grand chose, mon argument était que l'opérateur est plutôt simple à prendre en main car probablement déjà connu par des devs et de mon point de vue améliore la lisibilité du code (j'entends que ce point est subjectif), tout en ne coûtant rien en terme d’exécution voir ça améliore (très) légèrement les perfs.

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/06/2020, 12h52
  2. Réponses: 1
    Dernier message: 04/03/2020, 15h20
  3. Réponses: 0
    Dernier message: 12/12/2019, 15h54
  4. Réponses: 0
    Dernier message: 11/12/2019, 07h30
  5. Réponses: 0
    Dernier message: 20/04/2019, 23h00

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