Funktionale Programmierung ist ein deklaratives Paradigma. Eine der Stärken von FP ist, dass Nebenwirkungen vermieden werden. Es wird gesagt, dass für einige Probleme FP nicht gut passt.
Für welche häufigen Probleme ist funktionale Programmierung nicht geeignet?
Antworten:
Bewerbungen, die sehr zustandsorientiert sind. Videospiele sind ein gutes Beispiel, da sie die reale Welt abbilden. Es ist viel sinnvoller, daran zu denken, den Zustand der Welt zu ändern, anstatt jedes Mal, wenn sich etwas ändert, den vorherigen Zustand wiederherzustellen.
Ein konkretes Beispiel wäre, die Gesundheit eines Monsters zu verändern, nachdem es erschossen wurde. Es ist viel sinnvoller, einfach seine Gesundheit zu ändern, als es durch ein völlig neues Monster zu ersetzen, das in jeder Hinsicht gleich ist, außer dass es jetzt weniger Gesundheit hat. Diese Art von Änderungen macht fast alles in einer Spielwelt aus, und dies auf rein funktionale Weise zu tun, ist nicht sehr intuitiv. Ich stelle mir vor, dass es zu erheblichen Performance-Einbußen kommen kann, zumindest wenn Sie dies in einer rein funktionalen Sprache tun.
(Nebenbei bemerkt, einige Probleme in Spielen eignen sich sehr gut für die funktionale Programmierung, wie z. B. KI. Eine hybride funktionale / imperative Sprache wäre in diesen Fällen eine hervorragende Lösung.)
quelle
Bei der eingebetteten Echtzeitprogrammierung dreht sich alles um die Nebenwirkungen. Bei der Interaktion mit digitalen und analogen E / A-Anschlüssen, Timern, seriellen und parallelen Anschlüssen werden alle interessanten Funktionen mit Nebenwirkungen aufgerufen.
quelle
Ich würde argumentieren, dass die GUI-Programmierung nicht gut für die funktionale Programmierung geeignet ist. GUIs sind im Allgemeinen sehr stateful und es ist viel einfacher, sie mit state zu modellieren / zu verwalten, als ohne Nebeneffekte. Es ist sicherlich möglich , eine funktionierende Programmiersprache für GUIs zu verwenden ... aber es ist wahrscheinlich keine gute Idee.
Wie in einer anderen Antwort erwähnt, lassen sich Spiele häufig einfacher verwalten, indem der Status verfolgt wird. Sie können ein Spiel zwar in einer funktionalen Sprache schreiben, dies ist jedoch häufig einfacher und effizienter in einer "stateful" -Sprache (dh objektorientiert) Sprache).
quelle
Datengetriebene Geschäftsanwendungen. Benutzeroberfläche und einfache Datenoperationen benötigen kein FP.
quelle
filter
,reduce
undmap
. Werfen Sie in ein paarsort
,partition
,groupBy
. Schließlich ist die am weitesten verbreitete Programmiersprache , wie Anwendungen für das Schreiben von Excel, das ist eine funktionale Sprache.Sie können ein Problem, das für die eigentliche funktionale Programmierung nicht geeignet ist, nicht einfach ausschließen.
Viel hängt von der tatsächlichen Sprache ab, die für die funktionale Programmierung und deren Funktionen verwendet wird.
Ein Beispiel ist das bereits erwähnte Erlang für eingebettete Echtzeitsysteme.
Zustandsfülle ist auch kein gutes Kriterium gegen funktionale Programmierung, es gibt mehrere erfolgreiche Wege, um mit funktionalen Programmiersprachen umzugehen.
Nebenwirkungen werden auch häufig gegen funktionale Programmierung erwähnt. Jedes Programm, das nicht ganz solipsistisch ist, hat Nebenwirkungen. Daher hat jede reale FP-Sprache eine Möglichkeit, damit umzugehen. Es ist nur eine Frage, wie elegant die Nebenwirkungen der Welt zusammengefasst werden können.
Willkürliche Nebenwirkungen wie globale Variablen sind überhaupt nicht erforderlich.
Es gibt jedoch Problemgruppen, die den Einstieg in die funktionale Programmierung erleichtern, da sie Ihre gewohnte Sichtweise auf das Problem nicht so stark verdrehen. Aber wenn Sie erst einmal davon überzeugt sind, dass mehr und mehr Problemstellungen für weniger Nebenwirkungen offen sind.
Auch bei der Programmierung von C ist es immer eine gute Idee, beliebige Nebenwirkungen wie globale Variablen so weit wie möglich zu reduzieren.
quelle