„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Einführung in die funktionale Programmierung in JavaScript: Linsen Nr. 9

Einführung in die funktionale Programmierung in JavaScript: Linsen Nr. 9

Veröffentlicht am 06.08.2024
Durchsuche:747

Introduction to Functional Programming in JavaScript: Lenses #9

Linsen sind eine leistungsstarke und elegante Möglichkeit, sich auf Teile unveränderlicher Datenstrukturen in der funktionalen Programmierung zu konzentrieren und diese zu manipulieren. Sie bieten einen Mechanismus zum Abrufen und Festlegen von Werten in verschachtelten Objekten oder Arrays, ohne die Originaldaten zu verändern.

Was sind Linsen?

Eine Linse ist eine erstklassige Abstraktion, die eine Möglichkeit bietet, auf die Teile einer Datenstruktur zuzugreifen und diese zu aktualisieren. Eine Linse wird normalerweise durch zwei Funktionen definiert: einen Getter und einen Setter.

  • Getter: Eine Funktion, die einen Wert aus einer Datenstruktur extrahiert.
  • Setter: Eine Funktion, die einen Wert innerhalb einer Datenstruktur aktualisiert und eine neue Kopie der Struktur zurückgibt.

Linsen sind besonders nützlich für die Arbeit mit unveränderlichen Datenstrukturen, da sie Änderungen ermöglichen, ohne die Originaldaten zu verändern.

Vorteile von Objektiven

  1. Unveränderlichkeit: Linsen erleichtern die Arbeit mit unveränderlichen Datenstrukturen und stellen sicher, dass die Originaldaten nicht verändert werden.
  2. Modularität: Mit Linsen können Sie Datenzugriff und -aktualisierungen modularisieren, wodurch Ihr Code wiederverwendbar und einfacher zu warten ist.
  3. Zusammensetzbarkeit: Linsen können so zusammengesetzt werden, dass sie sich auf verschachtelte Teile einer Datenstruktur konzentrieren, wodurch komplexe Datenmanipulationen in einfachere, zusammensetzbare Vorgänge zerlegt werden können.

Implementierung von Linsen in JavaScript

Beginnen wir mit einer grundlegenden Implementierung von Linsen in JavaScript.

Grundlegende Linsenimplementierung

Eine Linse kann als Objekt mit get- und set-Methoden implementiert werden.

const lens = (getter, setter) => ({
  get: (obj) => getter(obj),
  set: (val, obj) => setter(val, obj),
});

const prop = (key) => lens(
  (obj) => obj[key],
  (val, obj) => ({ ...obj, [key]: val })
);

// Usage
const user = { name: 'Alice', age: 30 };

const nameLens = prop('name');

const userName = nameLens.get(user);
console.log(userName); // 'Alice'

const updatedUser = nameLens.set('Bob', user);
console.log(updatedUser); // { name: 'Bob', age: 30 }

In diesem Beispiel erstellt prop eine Linse, die sich auf eine bestimmte Eigenschaft eines Objekts konzentriert. Die get-Methode ruft den Wert der Eigenschaft ab, und die set-Methode aktualisiert den Wert und gibt ein neues Objekt zurück.

Objektive komponieren

Linsen können so zusammengestellt werden, dass sie mit verschachtelten Datenstrukturen arbeiten. Hier erstellen wir ein Dienstprogramm zum Zusammenstellen von Linsen.

const composeLenses = (outerLens, innerLens) => ({
  get: (obj) => innerLens.get(outerLens.get(obj)),
  set: (val, obj) => outerLens.set(innerLens.set(val, outerLens.get(obj)), obj),
});

// Usage with nested data
const addressLens = prop('address');
const cityLens = prop('city');

const userAddressCityLens = composeLenses(addressLens, cityLens);

const user = {
  name: 'Alice',
  address: {
    city: 'Wonderland',
    zip: '12345',
  },
};

const userCity = userAddressCityLens.get(user);
console.log(userCity); // 'Wonderland'

const updatedUser = userAddressCityLens.set('Oz', user);
console.log(updatedUser); // { name: 'Alice', address: { city: 'Oz', zip: '12345' } }

In diesem Beispiel können wir mit composeLenses eine Linse erstellen, die sich auf die Stadteigenschaft innerhalb des Adressobjekts konzentriert. Dies ermöglicht den Zugriff und die Aktualisierung verschachtelter Eigenschaften auf modulare und wiederverwendbare Weise.

Praktische Anwendungen von Linsen

Linsen sind besonders nützlich in Szenarien, in denen Unveränderlichkeit und modulare Datenmanipulation wichtig sind, beispielsweise bei der Zustandsverwaltung für Front-End-Anwendungen.

Statusverwaltung in React

In einer React-Anwendung können Linsen verwendet werden, um Zustandsaktualisierungen funktionaler und vorhersehbarer zu verwalten.

import React, { useState } from 'react';

const App = () => {
  const [state, setState] = useState({
    user: {
      name: 'Alice',
      address: {
        city: 'Wonderland',
      },
    },
  });

  const userLens = prop('user');
  const addressLens = prop('address');
  const cityLens = prop('city');

  const userAddressCityLens = composeLenses(userLens, composeLenses(addressLens, cityLens));

  const updateCity = (newCity) => {
    const newState = userAddressCityLens.set(newCity, state);
    setState(newState);
  };

  return (
    

City: {userAddressCityLens.get(state)}

); }; export default App;

In diesem Beispiel verwenden wir Linsen, um den Zugriff und die Aktualisierung der verschachtelten Stadteigenschaft innerhalb des Status der React-Komponente zu modularisieren. Dieser Ansatz macht die Zustandsaktualisierungen vorhersehbarer und einfacher zu verwalten.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/francescoagati/introduction-to-Functional-programming-in-javascript-lenses-9-3217?1 Bei Verstößen wenden Sie sich zum Löschen bitte an [email protected] Es
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3