Reine Funktionen und Unveränderlichkeit
Schreiben Sie vorhersehbare Funktionen ohne Seiteneffekte.
Reine Funktionen und Unveränderlichkeit ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des TypeScript Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist eine reine Funktion?
Eine reine Funktion liefert für dieselbe Eingabe dasselbe Ergebnis und hat keine Seiteneffekte. Sie liest oder schreibt keinen externen Zustand, verändert ihre Argumente nicht und führt keine Ein-/Ausgabe durch.
Ein reines Beispiel
Diese Funktion hängt nur von ihren Argumenten ab und erzeugt ausschließlich einen Rückgabewert. Ihr Aufruf verändert niemals etwas außerhalb der Funktion.
function add(a: number, b: number): number {
return a + b;
}
console.log(add(2, 3)); // 5, alwaysEin unreines Beispiel
Diese Funktion liest und verändert eine Variable außerhalb ihres Gültigkeitsbereichs. Ihr Ergebnis hängt daher vom verborgenen Zustand ab, und sie hinterlässt Spuren. Dadurch ist sie nicht rein.
let counter = 0;
function next(): number {
counter += 1; // side effect
return counter;
}
console.log(next(), next()); // 1 2, depends on historyReferenzielle Transparenz
Ein reiner Aufruf ist referenziell transparent: Sie können den Aufruf durch sein Ergebnis ersetzen, ohne das Programm zu verändern. add(2, 3) kann überall durch 5 ersetzt werden.
const x = add(2, 3) * 2;
const y = 5 * 2; // identical meaning
console.log(x === y); // trueWarum Reinheit hilft
Reine Funktionen lassen sich leicht testen (ohne Vorbereitung), einfach zwischenspeichern, sicher parallel ausführen und leicht nachvollziehen, da sie keine verborgenen Abhängigkeiten haben.
Argumente nicht verändern
Das Verändern eines Eingabe-Arrays oder -Objekts ist ein Seiteneffekt, den der Aufrufer möglicherweise nicht erwartet. Erstellen und geben Sie stattdessen einen neuen Wert zurück.
// Impure: mutates input
function pushImpure(xs: number[], v: number) { xs.push(v); return xs; }
// Pure: returns a new array
function pushPure(xs: number[], v: number): number[] { return [...xs, v]; }Unveränderliche Aktualisierungen mit Spread
Der Spread-Operator kopiert ein Objekt oder Array, sodass Sie Felder überschreiben können, ohne das Original anzutasten. Er ist das zentrale Werkzeug für unveränderliche Aktualisierungen in TS.
interface User { name: string; age: number }
function birthday(u: User): User {
return { ...u, age: u.age + 1 };
}
const before = { name: "Ada", age: 30 };
const after = birthday(before);
console.log(before.age, after.age); // 30 31Arrays unveränderlich aktualisieren
Verwenden Sie map, filter und Spread, um neue Arrays abzuleiten, statt sie zu verändern. Das ursprüngliche Array bleibt für anderen Code unverändert erhalten.
const nums = [1, 2, 3];
const doubled = nums.map(n => n * 2);
console.log(nums, doubled); // [1,2,3] [2,4,6]readonly für mehr Sicherheit
Die Kennzeichnung von Parametern mit readonly teilt dem Compiler (und den Lesern) mit, dass die Funktion sie nicht verändern wird, und stärkt die Reinheit auf Typebene.
function sum(xs: readonly number[]): number {
return xs.reduce((a, b) => a + b, 0);
}
console.log(sum([1, 2, 3])); // 6Effekte an die Ränder verlagern
Reale Programme benötigen Effekte (Protokollierung, Netzwerkzugriffe). Der funktionale Stil hält den Kern rein und isoliert Effekte an den Grenzen, sodass der Großteil des Codes vorhersehbar bleibt.
Mentale Checkliste
Fragen Sie sich bei jeder Funktion: Hängt sie nur von ihren Eingaben ab? Gibt sie ausschließlich einen Wert zurück? Lässt sie Eingaben und Außenwelt unverändert? Drei Ja bedeuten, dass sie rein ist.
Kurztest
Kurzer Test zu dieser Lektion.
Zusammenfassung
Reine Funktionen hängen nur von Eingaben ab und erzeugen keine Seiteneffekte, wodurch referenzielle Transparenz entsteht. Verwenden Sie Spread, map/filter und readonly für unveränderliche Aktualisierungen und verlagern Sie Effekte der realen Welt an die Ränder des Programms.
Häufig gestellte Fragen
Ist die Lektion „Reine Funktionen und Unveränderlichkeit“ kostenlos?
Ja — der vollständige Text von „Reine Funktionen und Unveränderlichkeit“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des TypeScript Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Reine Funktionen und Unveränderlichkeit“?
Schreiben Sie vorhersehbare Funktionen ohne Seiteneffekte. Du übst TypeScript Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um TypeScript Academy zu starten?
Keine Vorkenntnisse erforderlich. TypeScript Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Reine Funktionen und Unveränderlichkeit“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser TypeScript Academy-Lektion Code schreiben und ausführen?
Ja. Jede TypeScript Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Reine Funktionen und Unveränderlichkeit
- Currying und partielle Anwendung
- Funktionskomposition mit Typen
- Typisierte pipe- und flow-Utilities