JavaScript - L'objet WeakMap
Bonjour, futurs développeurs JavaScript ! Aujourd'hui, nous allons plonger dans une partie passionnante et quelque peu mystérieuse de JavaScript : l'objet WeakMap. Ne vous inquiétez pas si vous êtes nouveau dans la programmation ; je vais vous guider à travers ce concept pas à pas, comme j'ai fait pour des centaines d'étudiants au cours de mes années d'enseignement. Alors, prenez une tasse de café (ou de thé, si c'est votre truc), et mettons-nous ensemble en route pour cette aventure WeakMap !
Qu'est-ce qu'une WeakMap ?
Avant de rentrer dans les détails, comprehension ce qu'est une WeakMap. Imaginez que vous avez une boîte magique où vous pouvez stocker vos jouets, mais cette boîte a des propriétés spéciales. Elle n'accepte que des objets comme clés (aucune chaîne de caractères ou aucun nombre permis !), et elle a l'habitude particulière d'oublier les jouets si vous arrêtez de jouer avec eux pendant un moment. C'est essentiellement ce qu'est une WeakMap en JavaScript - une collection qui ne peut utiliser que des objets comme clés et ne pas empêcher ces objets d'être collectés par le garbage collector lorsque plus besoin dans votre programme.
Syntaxe
Regardons comment nous créons et utilisons une WeakMap :
let maWeakMap = new WeakMap();
Simple, n'est-ce pas ? Nous appelons simplement new WeakMap()
, et hop, nous avons notre boîte magique prête à l'emploi !
Propriétés de la WeakMap
Maintenant, vous pourriez penser : "Super ! Quelles propriétés puis-je accéder sur cette WeakMap ?" Eh bien, voici un fait amusant : les WeakMaps n'ont aucune propriété enumerable. C'est comme si notre boîte magique ne voulait pas révéler ses secrets facilement. Mais ne vous inquiétez pas, nous avons des méthodes pour interagir avec elle !
Méthodes de la WeakMap
Les WeakMaps sont livrés avec un ensemble petit mais puissant de méthodes. Regardons-les dans un tableau pratique :
Méthode | Description |
---|---|
set(key, value) | Ajoute un nouvel élément avec une clé et une valeur spécifiées |
get(key) | Retourne la valeur associée à la clé spécifiée |
has(key) | Retourne un booléen indiquant si un élément avec la clé spécifiée existe |
delete(key) | Supprime l'élément spécifié de la WeakMap |
Voyons ces méthodes en action !
set(key, value)
let obj1 = {};
let obj2 = {};
let maWeakMap = new WeakMap();
maWeakMap.set(obj1, "Bonjour");
maWeakMap.set(obj2, "Monde");
Dans cet exemple, nous ajoutons deux paires clé-valeur à notre WeakMap. Notez comment nous utilisons des objets (obj1
et obj2
) comme clés. Si nous essayions d'utiliser une chaîne de caractères ou un nombre comme clé, JavaScript lancerait une erreur plus rapidement que vous ne pouvez dire "WeakMap" !
get(key)
console.log(maWeakMap.get(obj1)); // Output: "Bonjour"
console.log(maWeakMap.get(obj2)); // Output: "Monde"
Ici, nous récupérons les valeurs associées à nos clés d'objet. C'est comme demander à notre boîte magique : "Salut, quel jouet ai-je stocké avec cette clé ?"
has(key)
console.log(maWeakMap.has(obj1)); // Output: true
console.log(maWeakMap.has({})); // Output: false
La méthode has
est comme un vigile à une boîte de nuit. Il vérifie si une clé d'objet spécifique est dans notre WeakMap. Dans ce cas, obj1
est autorisé à entrer, mais le nouvel objet vide {}
est renvoyé à la porte.
delete(key)
maWeakMap.delete(obj1);
console.log(maWeakMap.has(obj1)); // Output: false
Avec delete
, nous disons à notre WeakMap : "Je ne veux plus jouer avec ce jouet." Après la suppression, obj1
n'est plus dans notre WeakMap.
Constructeur WeakMap()
Le constructeur WeakMap peut également accepter un itérable de paires clé-valeur. Voici un exemple :
let obj3 = {};
let obj4 = {};
let maWeakMap2 = new WeakMap([
[obj3, "Valeur 1"],
[obj4, "Valeur 2"]
]);
console.log(maWeakMap2.get(obj3)); // Output: "Valeur 1"
C'est comme dire à notre boîte magique : "Voici une liste de jouets et où je veux qu'ils soient stockés" dès le départ.
Exemples
Maintenant que nous avons couvert les bases, examinons quelques exemples du monde réel où les WeakMaps peuvent être utiles.
Exemple 1 : Données privées
Les WeakMaps sont géniales pour stocker des données privées associées aux objets :
let donneesPrivees = new WeakMap();
class Personne {
constructor(nom, age) {
donneesPrivees.set(this, { nom: nom, age: age });
}
getName() {
return donneesPrivees.get(this).nom;
}
getAge() {
return donneesPrivees.get(this).age;
}
}
let john = new Personne("John", 30);
console.log(john.getName()); // Output: "John"
console.log(john.getAge()); // Output: 30
Dans cet exemple, nous utilisons une WeakMap pour stocker des données privées pour notre classe Personne
. Les données sont associées à chaque instance de Personne
, mais elles ne peuvent pas être accédées directement depuis les méthodes de la classe.
Exemple 2 : Mise en cache
Les WeakMaps peuvent être utilisées pour mettre en cache les résultats de calculs coûteux sans causer de fuites mémoires :
let cache = new WeakMap();
function operationCouteuse(obj) {
if (cache.has(obj)) {
console.log("Retourne le résultat mis en cache");
return cache.get(obj);
}
let resultat = /* ... effectuer un calcul coûteux ... */;
cache.set(obj, resultat);
return resultat;
}
let obj = {};
operationCouteuse(obj); // Effectue le calcul
operationCouteuse(obj); // Retourne le résultat mis en cache
Dans cet exemple, nous utilisons une WeakMap pour mettre en cache les résultats d'une opération coûteuse. Si l'opération a déjà été effectuée sur un objet particulier, nous retournons le résultat mis en cache au lieu de recalculer.
Conclusion
Et voilà, les amis ! Nous avons exploré le monde mystérieux des WeakMaps en JavaScript. De ses exigences uniques de clé à sa nature favorable au nettoyage par le garbage collector, les WeakMaps offrent un outil puissant pour des cas d'utilisation spécifiques dans vos programmes JavaScript.
Souvenez-vous, les WeakMaps sont comme ce ami excentrique qui ne se souvient que des visages, pas des noms, et a tendance à oublier les gens qu'il n'a pas vus depuis un moment. Ils ne sont pas adaptés à toutes les situations, mais lorsqu'ils sont nécessaires, ils sont inestimables.
Alors, continuez votre voyage JavaScript et gardez les WeakMaps dans votre boîte à outils. Vous ne savez jamais quand vous pourriez avoir besoin de stocker des données privées ou de créer une mise en cache qui ne cause pas de fuites mémoires. Bon codage, et que vos WeakMaps soient toujours forts en esprit !
Credits: Image by storyset