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

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

La spécification ECMAScript 2023 pour JavaScript inclut de nouvelles méthodes pour les tableaux,
Notamment la possibilité de rechercher un élément dans un tableau à partir de la fin du tableau

Le , par Bill Fassinou

31PARTAGES

25  0 
ECMAScript 2023 (ES14), la prochaine mise à jour prévue de la norme officielle du langage de programmation JavaScript, devrait ajouter quatre nouvelles fonctionnalités, notamment pour la recherche et la modification des tableaux, l'utilisation de symboles comme clés WeakMap et la normalisation de la prise en charge de la grammaire shebang/hashbang. Ces propositions finalisées ont été publiées par l'ECMA TC39 (Technical Committee 39) sur GitHub et devraient officiellement intégrer le langage de programmation JavaScript en juin. Il s'agit de la quatorzième édition de la spécification ECMAScript depuis la publication de la première version en 1997.

Pour rappel, ECMAScript est une spécification de langage de script qui a été développée par ECMA International, une organisation de standardisation fondée en 1961 à Genève, en Suisse. Sa norme la plus connue est ECMAScript, qui est la norme pour JavaScript. La norme ECMAScript est largement utilisée pour les scripts côté client dans les navigateurs Web, et elle est également utilisée pour les scripts côté serveur avec Node.js. De nouvelles fonctionnalités sont régulièrement ajoutées à la norme et dans le cadre de la mise à jour de cette année, les quatre fonctionnalités mentionnées ci-dessous devraient être ajoutées au langage JavaScript.


Les versions actualisées de l'ECMAScript sont traditionnellement finalisées par l'ECMA en juin. La version 2022 de l'ECMAScript de l'année dernière comportait des éléments de classe et des capacités d'attente de premier niveau.

Les méthodes .findlast() et .findLastIndex()

Ces deux nouvelles méthodes pour les tableaux vous permettent de rechercher un élément dans un tableau à partir de la fin du tableau, plutôt qu'à partir du début. Lorsque l'itération se fait à partir du début d'un tableau, la boucle doit vérifier chaque élément du tableau jusqu'à ce qu'elle trouve l'élément souhaité. En revanche, si la recherche commence à la fin du tableau, la boucle peut s'arrêter plus tôt si elle trouve l'élément souhaité et qu'il est proche de la fin du tableau.

Code JavaScript : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const array = [{ value: 1 }, { value: 2 }, { value: 3 }, { value: 4 }]; 
  
array.find(n => n.value % 2 === 1); // { value: 1 } 
array.findIndex(n => n.value % 2 === 1); // 0 
  
// ======== Before the proposal ===========  
  
// find 
[...array].reverse().find(n => n.value % 2 === 1); // { value: 3 } 
  
// findIndex 
array.length - 1 - [...array].reverse().findIndex(n => n.value % 2 === 1); // 2 
array.length - 1 - [...array].reverse().findIndex(n => n.value === 42); // should be -1, but 4 
  
// ======== In the proposal ===========  
// find 
array.findLast(n => n.value % 2 === 1); // { value: 3 } 
  
// findIndex 
array.findLastIndex(n => n.value % 2 === 1); // 2 
array.findLastIndex(n => n.value === 42); // -1


Il en résulte moins d'itérations, ce qui peut améliorer les performances. En termes d'efficacité de la mémoire, l'itération d'un tableau à partir du dernier élément peut parfois être bénéfique lorsque le tableau est très grand et que l'utilisation de la mémoire est un problème. Dans ce cas, commencer la recherche à partir de la fin du tableau peut permettre à la boucle de se terminer plus tôt, réduisant ainsi l'empreinte mémoire du programme.

Utilisation des symboles comme clés WeakMap

Un WeakMap est une collection de paires clé/valeur dont les clés doivent être des objets ou des symboles non enregistrés, avec des valeurs de n'importe quel type JavaScript arbitraire, et qui ne crée pas de références fortes à ses clés. En d'autres termes, la présence d'un objet en tant que clé dans une WeakMap n'empêche pas l'objet d'être ramassé à la poubelle. Une fois qu'un objet utilisé comme clé a été collecté, ses valeurs correspondantes dans n'importe quel WeakMap deviennent également candidates à la collecte des ordures - tant qu'elles ne sont pas fortement référencées ailleurs.

Code JavaScript : Sélectionner tout
1
2
3
4
5
6
7
const weak = new WeakMap(); 
  
// Pun not intended: being a symbol makes it become a more symbolic key 
const key = Symbol('my ref'); 
const someObject = { /* data data data */ }; 
  
weak.set(key, someObject);


Le seul type primitif qui peut être utilisé comme clé d'une WeakMap est le symbole - plus précisément, les symboles non enregistrés - car les symboles non enregistrés sont garantis uniques et ne peuvent pas être recréés. Actuellement, les WeakMaps n'autorisent que les clés d'objets. Cela signifie que si vous voulez utiliser une clé qui n'est pas un objet, vous devez utiliser une solution de contournement telle que l'utilisation d'un objet comme clé et le stockage de la valeur souhaitée en tant que propriété de cet objet. Mais la spécification ECMAScript 2023 annonce la prise en charge de l'utilisation de symboles comme clés WeakMap.

Code JavaScript : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const objectLookup = new WeakMap(); 
const otherRealm = new ShadowRealm(); 
const coinFlip = otherRealm.evaluate(`(a, b) => Math.random() > 0.5 ? a : b;`); 
  
// later... 
let a = { name: 'alice' }; 
let b = { name: 'bob' }; 
let symbolA = Symbol(); 
let symbolB = Symbol(); 
objectLookup.set(symbolA, a); 
objectLookup.set(symbolB, b); 
a = b = null; // ok to drop direct object references 
  
// connected identities preserved as the symbols round-tripped through the other realm 
let chosen = objectLookup.get(coinFlip(symbolA, symbolB)); 
assert(['alice', 'bob'].includes(chosen.name));


En autorisant l'utilisation de symboles comme clés dans les WeakMaps, le changement à venir dans ECMAScript 2023 simplifiera ce processus et rendra plus intuitive l'utilisation de symboles comme clés dans les WeakMaps par les développeurs. En outre, elle fournira une approche plus cohérente de l'utilisation de symboles comme clés dans différentes structures de données JavaScript, telles que Maps et Sets, qui prennent déjà en charge l'utilisation de symboles comme clés.

Modifier un tableau copié tout en conservant le tableau original

Actuellement, en JavaScript, la plupart des méthodes de tableau telles que push(), pop(), shift() et unshift() modifient le tableau original en place. Avec la nouvelle proposition d'ECMAScript 2023, les développeurs pourront modifier un tableau en créant une copie de celui-ci avec les changements souhaités. Cette proposition fournit des méthodes supplémentaires sur [C=JavaScript]Array.prototype[/B] et TypedArray.prototype pour permettre des changements sur le tableau en renvoyant une nouvelle copie de celui-ci avec le changement.

Code JavaScript : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
const sequence = [1, 2, 3]; 
sequence.toReversed(); // => [3, 2, 1] 
sequence; // => [1, 2, 3] 
  
const outOfOrder = new Uint8Array([3, 1, 2]); 
outOfOrder.toSorted(); // => Uint8Array [1, 2, 3] 
outOfOrder; // => Uint8Array [3, 1, 2] 
  
const correctionNeeded = [1, 1, 3]; 
correctionNeeded.with(1, 2); // => [1, 2, 3] 
correctionNeeded; // => [1, 1, 3]


La modification d'un tableau par copie peut être utile dans certains scénarios. Par exemple, cela peut permettre d'éviter des effets secondaires inattendus dans des bases de code complexes où plusieurs parties du code peuvent modifier le même tableau.

Grammaire shebang/hashbang

Il s'agit d'une proposition pour correspondre à l'usage de facto dans certains hôtes JS CLI qui permettent les Shebangs/Hashbang. Ces hôtes suppriment le hashbang pour générer des textes sources JS valides avant de les transmettre aux moteurs JS. Ce plan déplacerait le dépouillement vers les moteurs et unifierait et normaliserait la façon dont cela est fait. Pour précisément, la grammaire shebangs/hashbangs indique au système d'exploitation l'interpréteur à utiliser pour exécuter un script. Votre navigateur est livré avec un interpréteur par défaut, mais votre ligne de commande n'est pas livrée avec un interpréteur par défaut.

Code JavaScript : Sélectionner tout
1
2
3
4
#!/usr/bin/env node 
// in the Script Goal 
'use strict'; 
console.log(1);


Code JavaScript : Sélectionner tout
1
2
3
4
#!/usr/bin/env node 
// in the Module Goal 
export {}; 
console.log(1);


Il existe plusieurs interprètes JS que vous pouvez télécharger dans votre environnement CLI (Node.js est le plus populaire), mais leurs shebangs ne sont pas tous identiques. Il n'est actuellement pas standardisé et varie entre les différents environnements CLI. La grammaire Hashbang proposée vise à fournir un moyen normalisé de gérer les hashbangs, notamment en les supprimant du script avant de le transmettre au moteur JavaScript pour exécution.

Source : ECMAScript 2023 (1, 2)

Et vous ?

Que pensez-vous des fonctionnalités proposées pour la norme ECMAScript 2023 ?

Voir aussi

État de JavaScript 2022 : React reste le framework front-end dominant mais est en perte de vitesse côté satisfaction, JQuery est la troisième bibliothèque la plus utilisée

Microsoft propose d'introduire une syntaxe de type dans JavaScript, notamment le typage des variables et des paramètres

La spécification des nouvelles fonctionnalités de la norme ECMAScript 2021 est terminée, tour d'horizon des nouveautés introduites dans cette nouvelle version

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de TotoParis
Membre expérimenté https://www.developpez.com
Le 12/04/2023 à 13:19
Citation Envoyé par Bill Fassinou Voir le message

Que pensez-vous des fonctionnalités proposées pour la norme ECMAScript 2023 ?
On est loin de la recherche dichotomique en COBOL : c'est d'une efficacité redoutable. Il me semble que ce soit le seul langage de programmation à proposer une telle possibilité.
0  0 
Avatar de Beginner.
Membre expert https://www.developpez.com
Le 12/04/2023 à 23:13
Citation Envoyé par TotoParis Voir le message
On est loin de la recherche dichotomique en COBOL : c'est d'une efficacité redoutable. Il me semble que ce soit le seul langage de programmation à proposer une telle possibilité.
Cela m'a aussi fait penser à la recherche dichotomique mais en python car je lisais justement ceci : Recherche rapide par dichotomie dans une liste complexe triée
0  0 
Avatar de melka one
Membre expérimenté https://www.developpez.com
Le 11/04/2023 à 12:12
Que pensez-vous des fonctionnalités proposées pour la norme ECMAScript 2023 ?
jour

Ces nouveauté ferons t'elles de nous de meilleurs développeurs ?
0  1