In einem Interview mit John Hughes, in dem er über Erlang und Haskell spricht, hat er Folgendes über die Verwendung von Stateful Libraries in Erlang zu sagen:
Wenn ich eine Stateful-Bibliothek verwenden möchte, erstelle ich normalerweise eine Schnittstelle ohne Nebeneffekte, damit ich sie im restlichen Code sicher verwenden kann.
Was meint er damit? Ich versuche mir ein Beispiel zu überlegen, wie das aussehen würde, aber meine Vorstellungskraft und / oder mein Wissen scheitern.
haskell
erlang
state
side-effect
Beta
quelle
quelle
Antworten:
(Ich kenne Erlang nicht und ich kann Haskell nicht schreiben, aber ich denke, ich kann trotzdem antworten.)
Nun, in diesem Interview wird das Beispiel einer Bibliothek zur Erzeugung von Zufallszahlen gegeben. Hier ist eine mögliche Stateful-Schnittstelle:
Ausgabe kann sein
5 2 7
. Für jemanden, der Unveränderlichkeit mag, ist das einfach falsch! Es sollte sein5 5 5
, weil wir die Methode für dasselbe Objekt aufgerufen haben.Was wäre eine zustandslose Schnittstelle? Wir können die Folge von Zufallszahlen als träge bewertete Liste anzeigen, in
next
der der Kopf tatsächlich abgerufen wird:Mit einer solchen Schnittstelle können wir immer zu einem früheren Zustand zurückkehren. Wenn zwei Teile Ihres Codes auf dasselbe RNG verweisen, erhalten sie tatsächlich dieselbe Zahlenfolge. In einer funktionalen Denkweise ist dies sehr wünschenswert.
Dies in einer Stateful-Sprache umzusetzen ist nicht so kompliziert. Beispielsweise:
Wenn Sie ein bisschen syntaktischen Zucker hinzugefügt haben, damit er sich wie eine Liste anfühlt, ist das eigentlich ganz nett.
quelle
Ein Schlüsselbegriff ist hier der des externen veränderlichen Zustands . Eine Bibliothek, die keinen externen veränderlichen Zustand aufweist, ist eine Bibliothek, die frei von Nebenwirkungen ist. Jede Funktion in einer solchen Bibliothek hängt nur von den übergebenen Argumenten ab.
Handliche Lackmustests, die ich benutze:
quelle