Ja, FP kann in Unternehmensanwendungen verwendet werden. Clojure ist ein Beispiel für eine FP-Sprache mit Erfolg im Unternehmen: http://cognitect.com/clojure#successstories
Die Repräsentation des Staates kann eine Herausforderung für die FP sein, und der Paradigmenwechsel zur Anpassung an die FP kann ein bisschen verrückt werden. Einige FP-Sprachen erlauben keinerlei Nebeneffekte und keinen veränderlichen Zustand. Clojure erlaubt beides, aber entmutigt oder isoliert diese Paradigmen.
Kurz gesagt, die Zustandsdarstellung kann OO sehr ähnlich sein. Es ist eine Zustandsänderung, die sehr unterschiedlich ist. So kann beispielsweise im FP-Zustand durch Listen und Karten dargestellt werden. Eine Liste der Mitarbeiter kann folgendermaßen aussehen:
[[name: "James Brown" address: "Barnwell, SC"]
[name: "Elvis Presley" address: "Tupelo, MS"]]
Mir sind zwei Möglichkeiten bekannt, mit Statusänderungen in FP umzugehen. Man ist so etwas wie eine funktionale reaktive Programmierung. In diesem Paradigma wird der gesamte Status nur auf höchster Ebene behandelt. Beispielsweise enthält eine HTML-Ansicht Ihrer Anwendung den Status (wie Name, Adresse usw. der Person). Wenn Sie nun auf "Name aktualisieren" klicken, wird eine Funktion aufgerufen, die alle Aspekte einer Namensaktualisierung behandelt, mit Ausnahme der tatsächlichen Änderung des Namens. Das mag komisch klingen ... aber ertrage es mit mir. Der geänderte Name wird dann von der Funktion zurückgegeben und die Ansicht (oder der persistente Datenspeicher usw.) zeigt den neuen Namen an. Alternativ wird eine neue Struktur mit dem aktualisierten Namen zurückgegeben. Was macht die Funktion? Es validiert den Namen und gibt den neuen Namen zurück, wenn er gültig ist. Ist dies nicht der Fall, tritt ein Fehler auf. und möglicherweise eine neue Ansicht oder einen neuen Navigationslink. Bei etwas Komplexerem als einer Namensänderung kann dies viel mehr bewirken.
Für FRP ist das von der Funktion zurückgegebene Objekt also der neue Status und kann direkt an die Ansicht übergeben werden, oder was auch immer sich auf der hohen Ebene befindet. In einigen Fällen übergibt FRP den gesamten Status an die Funktion und gibt den gesamten Status zurück.
Bei diesem Paradigma muss der Container oder das Framework die Aktualisierung der Anzeige, der Datenbank oder aller anderen Elemente abwickeln, die vom neuen Status aus aktualisiert werden müssen. Sie können sich also ein Framework vorstellen, das die Anwendung auf dem Bildschirm zeichnet. Wenn ein Benutzer auf etwas klickt, werden Funktionen aufgerufen und der neue Status wird zurückgegeben. Das Framework aktualisiert dann den Bildschirm, indem entweder alles neu gezeichnet oder Teile der Anzeige intelligent neu gezeichnet werden. Sehen http://blog.getprismatic.com/om-sweet-om-high-functional-frontend-engineering-with-clojurescript-and-react/
Clojure verwendet das zweite Paradigma, auf das ich gestoßen bin, und zwar, um Zustandsänderungen zu isolieren, aber nicht notwendigerweise auf die höchste Ebene zu beschränken. Mit Clojure muss jeder veränderbare Status von einem Atom, Agenten oder Verweis "gehalten" werden (es sei denn, Sie verwenden Java-Objekte für den Status). Die Art und Weise, wie dies funktioniert, ist das Objekt, auf das das Atom / Agent / Ref verweist (wie auch immer Sie es nennen möchten). Das Atom / Agent / Ref kann sich jedoch ändern, um auf ein neues Objekt zu verweisen. In diesem Fall verwenden Sie spezielle Methoden für das Atom / Agent / Ref, die sagen: "Aktualisieren Sie das Objekt hier, indem Sie so oder so vorgehen und das Atom / Agent / Ref einem neuen Objekt zuweisen".
Warum ist das vorteilhaft, fragen Sie sich? Da das unveränderliche Objekt, auf das von diesen Clojure-Konstrukten verwiesen wird, möglicherweise an eine Funktion übergeben wird, die etwas tut, und während diese Funktion ausgeführt wird, wird die Referenz auf das Objekt garantiert nicht geändert. Das Atom / Agent / Ref wird also nicht an die Funktion übergeben, sondern das unveränderliche Objekt, auf das sie zeigen. Atome, Agenten und Refs haben spezielle Eigenschaften, die Aktualisierungen und Parallelität auf sichere Weise und als Teil der Sprache handhaben. Siehe http://clojure.org/state
Ich hoffe das hilft. Ich empfehle, mehr über den Clojure-Staat und FRP zu lesen, um ein besseres Verständnis dafür zu erhalten, wie Mitarbeiter und Personen in FP vertreten sein können. Obwohl die tatsächliche Darstellung der objektorientierten Programmierung ähnelt ... ist es die Veränderbarkeit, die sich wirklich unterscheidet.