© saicle/Shutterstock.com
PHP Magazin
Tiefe Kopien von Objekten erstellen

Node.js-Module:

Immutability ist seit einiger Zeit in aller Munde und das aus gutem Grund. Der Einzug funktionaler Programmierparadigmen in JavaScript hat Immutable-Datenstrukturen noch mehr an Relevanz gewinnen lassen.

Sebastian Springer


In der funktionalen Programmierung wird das Modifizieren von Datenstrukturen als unerwünschter Seiteneffekt angesehen, der zu vermeiden ist. Aber nicht nur wegen der funktionalen Programmierung sollten Sie sich mit Immutability in JavaScript auseinandersetzen. Auch viele moderne Frameworks verlassen sich bei der Erkennung von Änderungen auf Immutable-Datenstrukturen. Der Grund hierfür ist einfach erklärt: Nehmen Sie an, Sie haben eine verschachtelte Objektstruktur und führen eine Änderung an einer Eigenschaft eines untergeordneten Objekts durch. Um diese Änderung erkennen zu können, müssten Sie die gesamte Objektstruktur auf Änderungen überprüfen. Mit Immutability erzeugen Sie eine Kopie des ursprünglichen Objekts und führen auf dieser die Änderung durch. Für den Algorithmus bedeutet das, dass sich die Referenz auf das Objekt geändert hat, also eine Änderung vorliegen muss.

Erzeugung von Kopien von Objekten

Sie müssen sich jedoch nicht mit den Implementierungsdetails moderner Frameworks auseinandersetzen, um die Vorteile von Immutability zu erkennen. Gehen Sie von einer Funktion aus, der ein Objekt übergeben wird, auf dem die Funktion eine Operation vornehmen soll. Nun haben Sie zwei Möglichkeiten: Da Objekte und Arrays in JavaScript per Referenz übergeben werden, können Sie das Objekt direkt manipulieren oder Sie erzeugen eine Kopie des Objekts, verändern diese und geben das veränderte Objekt zurück. Bei der ersten Option haben Sie den klassischen Fall eines unerwünschten Seiteneffekts. Je nachdem, wie viele Teile Ihrer Applikation mit diesem Objekt arbeiten, können Sie schwerwiegende Effekte hervorrufen, die die gesamte Applikation betreffen.

Als konkretes Beispiel verwenden wir eine Funktion (Listing 1), die ein Benutzerobjekt erhält und den Nachnamen des Benutzers in Großbuchstaben ändert. Die initiale Version der uppercaseLastname-Funktion arbeitet auf der Referenz des Benutzerobjekts.

Listing 1: „uppercaseLastname“const user = { firstname: 'Klaus', lastname: 'Müller'}; function uppercaseLastname(user) { user.lastname = user.lastname.toUpperCase();} uppercaseLastname(user); console.log(user.lastname);

Zur Erzeugung von Kopien von Objekten stehen Ihnen in JavaScript eine Reihe von Optionen zur Verfügung. Eine der gebräuchlichsten Varianten ist der Einsatz des Spread-Operators, mit dem Sie ein neues Objekt erzeugen können (Listing 2).

Listing 2: „uppercaseLastname“, die auf einer Kopie arbeitetconst user = { firstname: 'Klaus', lastname: 'Müller'}; fu...

PHP Magazin
Tiefe Kopien von Objekten erstellen

Node.js-Module:

Immutability ist seit einiger Zeit in aller Munde und das aus gutem Grund. Der Einzug funktionaler Programmierparadigmen in JavaScript hat Immutable-Datenstrukturen noch mehr an Relevanz gewinnen lassen.

Sebastian Springer


In der funktionalen Programmierung wird das Modifizieren von Datenstrukturen als unerwünschter Seiteneffekt angesehen, der zu vermeiden ist. Aber nicht nur wegen der funktionalen Programmierung sollten Sie sich mit Immutability in JavaScript auseinandersetzen. Auch viele moderne Frameworks verlassen sich bei der Erkennung von Änderungen auf Immutable-Datenstrukturen. Der Grund hierfür ist einfach erklärt: Nehmen Sie an, Sie haben eine verschachtelte Objektstruktur und führen eine Änderung an einer Eigenschaft eines untergeordneten Objekts durch. Um diese Änderung erkennen zu können, müssten Sie die gesamte Objektstruktur auf Änderungen überprüfen. Mit Immutability erzeugen Sie eine Kopie des ursprünglichen Objekts und führen auf dieser die Änderung durch. Für den Algorithmus bedeutet das, dass sich die Referenz auf das Objekt geändert hat, also eine Änderung vorliegen muss.

Erzeugung von Kopien von Objekten

Sie müssen sich jedoch nicht mit den Implementierungsdetails moderner Frameworks auseinandersetzen, um die Vorteile von Immutability zu erkennen. Gehen Sie von einer Funktion aus, der ein Objekt übergeben wird, auf dem die Funktion eine Operation vornehmen soll. Nun haben Sie zwei Möglichkeiten: Da Objekte und Arrays in JavaScript per Referenz übergeben werden, können Sie das Objekt direkt manipulieren oder Sie erzeugen eine Kopie des Objekts, verändern diese und geben das veränderte Objekt zurück. Bei der ersten Option haben Sie den klassischen Fall eines unerwünschten Seiteneffekts. Je nachdem, wie viele Teile Ihrer Applikation mit diesem Objekt arbeiten, können Sie schwerwiegende Effekte hervorrufen, die die gesamte Applikation betreffen.

Als konkretes Beispiel verwenden wir eine Funktion (Listing 1), die ein Benutzerobjekt erhält und den Nachnamen des Benutzers in Großbuchstaben ändert. Die initiale Version der uppercaseLastname-Funktion arbeitet auf der Referenz des Benutzerobjekts.

Listing 1: „uppercaseLastname“const user = { firstname: 'Klaus', lastname: 'Müller'}; function uppercaseLastname(user) { user.lastname = user.lastname.toUpperCase();} uppercaseLastname(user); console.log(user.lastname);

Zur Erzeugung von Kopien von Objekten stehen Ihnen in JavaScript eine Reihe von Optionen zur Verfügung. Eine der gebräuchlichsten Varianten ist der Einsatz des Spread-Operators, mit dem Sie ein neues Objekt erzeugen können (Listing 2).

Listing 2: „uppercaseLastname“, die auf einer Kopie arbeitetconst user = { firstname: 'Klaus', lastname: 'Müller'}; fu...

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang