Skip to content

Commit 4032b78

Browse files
authored
Merge pull request #196 from behrends/WeakMap_and_WeakSet
WeakMap and WeakSet
2 parents 5767e97 + 7bdd01c commit 4032b78

File tree

5 files changed

+136
-138
lines changed

5 files changed

+136
-138
lines changed
Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,43 @@
1-
Let's store read messages in `WeakSet`:
1+
Lass uns gelesene Nachrichten in `WeakSet` speichern:
22

33
```js run
44
let messages = [
5-
{text: "Hello", from: "John"},
6-
{text: "How goes?", from: "John"},
7-
{text: "See you soon", from: "Alice"}
5+
{text: "Hallo", from: "John"},
6+
{text: "Wie läuft's?", from: "John"},
7+
{text: "Bis bald", from: "Alice"}
88
];
99

1010
let readMessages = new WeakSet();
1111

12-
// two messages have been read
12+
// Zwei Nachrichten wurden gelesen
1313
readMessages.add(messages[0]);
1414
readMessages.add(messages[1]);
15-
// readMessages has 2 elements
15+
// readMessages hat 2 Elemente
1616

17-
// ...let's read the first message again!
17+
// ...lass uns die erste Nachricht nochmal lesen!
1818
readMessages.add(messages[0]);
19-
// readMessages still has 2 unique elements
19+
// readMessages hat immer noch 2 einzigartige Elemente
2020

21-
// answer: was the message[0] read?
22-
alert("Read message 0: " + readMessages.has(messages[0])); // true
21+
// Antwort: Wurde die Nachricht[0] gelesen?
22+
alert("Gelesene Nachricht 0: " + readMessages.has(messages[0])); // true
2323

2424
messages.shift();
25-
// now readMessages has 1 element (technically memory may be cleaned later)
25+
// jetzt hat readMessages 1 Element (technisch gesehen, könnte der Speicher später bereinigt werden)
2626
```
2727

28-
The `WeakSet` allows to store a set of messages and easily check for the existence of a message in it.
28+
Das `WeakSet` ermöglicht es, eine Menge von Nachrichten zu speichern und einfach zu überprüfen, ob eine Nachricht darin existiert.
2929

30-
It cleans up itself automatically. The tradeoff is that we can't iterate over it, can't get "all read messages" from it directly. But we can do it by iterating over all messages and filtering those that are in the set.
30+
Es bereinigt sich automatisch. Der Kompromiss ist, dass wir nicht darüber iterieren können, d.h. wir können nicht "alle gelesenen Nachrichten" direkt erhalten. Aber wir können dies erreichen, indem wir über alle Nachrichten iterieren und diejenigen aussortieren, die nicht im Set sind.
3131

32-
Another, different solution could be to add a property like `message.isRead=true` to a message after it's read. As messages objects are managed by another code, that's generally discouraged, but we can use a symbolic property to avoid conflicts.
32+
Eine andere, unterschiedliche Lösung könnte sein, einer Nachricht eine Eigenschaft wie `message.isRead=true` hinzuzufügen, nachdem sie gelesen wurde. Da Nachrichtenobjekte von anderem Code verwaltet werden, ist das allgemein nicht empfohlen, aber wir können eine symbolische Eigenschaft verwenden, um Konflikte zu vermeiden.
3333

34-
Like this:
34+
So wie hier:
3535
```js
36-
// the symbolic property is only known to our code
36+
// die symbolische Eigenschaft ist nur unserem Code bekannt
3737
let isRead = Symbol("isRead");
3838
messages[0][isRead] = true;
3939
```
4040

41-
Now third-party code probably won't see our extra property.
41+
Jetzt wird Code von dritten unsere zusätzliche Eigenschaft wahrscheinlich nicht sehen.
4242

43-
Although symbols allow to lower the probability of problems, using `WeakSet` is better from the architectural point of view.
43+
Obwohl Symbole die Wahrscheinlichkeit von Problemen verringern, ist die Verwendung von `WeakSet` aus architektonischer Sicht besser.

1-js/05-data-types/08-weakmap-weakset/01-recipients-read/task.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,22 @@ importance: 5
22

33
---
44

5-
# Store "unread" flags
5+
# Speicherung von "ungelesen"-Markierungen
66

7-
There's an array of messages:
7+
Gegeben sei ein Array von Nachrichten:
88

99
```js
1010
let messages = [
11-
{text: "Hello", from: "John"},
12-
{text: "How goes?", from: "John"},
13-
{text: "See you soon", from: "Alice"}
11+
{text: "Hallo", from: "John"},
12+
{text: "Wie läuft's?", from: "John"},
13+
{text: "Bis bald", from: "Alice"}
1414
];
1515
```
1616

17-
Your code can access it, but the messages are managed by someone else's code. New messages are added, old ones are removed regularly by that code, and you don't know the exact moments when it happens.
17+
Dein Code kann darauf zugreifen, aber die Nachrichten werden von anderem Code verwaltet. Neue Nachrichten werden hinzugefügt, alte regelmäßig entfernt, und du weißt nicht genau, in welchen Momenten das passiert.
1818

19-
Now, which data structure could you use to store information about whether the message "has been read"? The structure must be well-suited to give the answer "was it read?" for the given message object.
19+
Welche Datenstruktur könntest du nun verwenden, um Informationen darüber zu speichern, ob die Nachricht "gelesen wurde"? Die Struktur muss gut geeignet sein, um die Frage "wurde es gelesen?" für das gegebene Nachrichtenobjekt zu beantworten.
2020

21-
P.S. When a message is removed from `messages`, it should disappear from your structure as well.
21+
P.S. Wenn eine Nachricht aus `messages` entfernt wird, sollte sie auch aus deiner Struktur verschwinden.
2222

23-
P.P.S. We shouldn't modify message objects, add our properties to them. As they are managed by someone else's code, that may lead to bad consequences.
23+
P.P.S. Wir sollten die Nachrichtenobjekte nicht modifizieren oder unsere Eigenschaften hinzufügen. Da sie von anderem Code verwaltet werden, könnte das zu schlechten Konsequenzen führen.
Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
2-
To store a date, we can use `WeakMap`:
1+
Um ein Datum zu speichern, können wir `WeakMap` verwenden:
32

43
```js
54
let messages = [
6-
{text: "Hello", from: "John"},
7-
{text: "How goes?", from: "John"},
8-
{text: "See you soon", from: "Alice"}
5+
{text: "Hallo", from: "John"},
6+
{text: "Wie läuft's?", from: "John"},
7+
{text: "Bis bald", from: "Alice"}
98
];
109

1110
let readMap = new WeakMap();
1211

1312
readMap.set(messages[0], new Date(2017, 1, 1));
14-
// Date object we'll study later
13+
// Date-Objekt, das wir später betrachten werden
1514
```

1-js/05-data-types/08-weakmap-weakset/02-recipients-when-read/task.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@ importance: 5
22

33
---
44

5-
# Store read dates
5+
# Lesezeitpunkte speichern
66

7-
There's an array of messages as in the [previous task](info:task/recipients-read). The situation is similar.
7+
Es gibt ein Array von Nachrichten, wie in der [vorherigen Aufgabe](info:task/recipients-read). Die Situation ist ähnlich.
88

99
```js
1010
let messages = [
11-
{text: "Hello", from: "John"},
12-
{text: "How goes?", from: "John"},
13-
{text: "See you soon", from: "Alice"}
11+
{text: "Hallo", from: "John"},
12+
{text: "Wie läuft's?", from: "John"},
13+
{text: "Bis bald", from: "Alice"}
1414
];
1515
```
1616

17-
The question now is: which data structure you'd suggest to store the information: "when the message was read?".
17+
Die Frage lautet nun: Welche Datenstruktur würdest Du vorschlagen, um die Information zu speichern: "Wann wurde die Nachricht gelesen?".
1818

19-
In the previous task we only needed to store the "yes/no" fact. Now we need to store the date, and it should only remain in memory until the message is garbage collected.
19+
In der vorherigen Aufgabe mussten wir nur die Tatsache "ja/nein" speichern. Jetzt müssen wir das Datum speichern, und es sollte nur so lange im Speicher bleiben, bis die Nachricht vom Garbage Collector gelöscht wird.
2020

21-
P.S. Dates can be stored as objects of built-in `Date` class, that we'll cover later.
21+
P.S. Daten können als Objekte der eingebauten `Date`-Klasse gespeichert werden, die wir später behandeln werden.

0 commit comments

Comments
 (0)