Denn all diese Vorteile sind auch Nachteile.
Staatenlose Programme; Keine Nebenwirkungen
In realen Programmen dreht sich alles um Nebenwirkungen und Mutationen. Wenn der Benutzer eine Taste drückt, möchte er, dass etwas passiert. Wenn sie etwas eingeben, möchten sie, dass dieser Status den Status ersetzt, der früher vorhanden war. Wenn Jane Smith in der Buchhaltung heiratet und ihren Namen in Jane Jones ändert, sollte sich die Datenbank, die den Geschäftsprozess unterstützt, der ihren Gehaltsscheck druckt, besser mit dieser Art von Mutation befassen. Wenn Sie das Maschinengewehr auf den Außerirdischen abfeuern, modellieren die meisten Menschen dies nicht mental als den Bau eines neuen Außerirdischen mit weniger Trefferpunkten. Sie modellieren dies als Mutation der Eigenschaften eines vorhandenen Außerirdischen.
Wenn die Konzepte der Programmiersprache grundsätzlich gegen die zu modellierende Domäne arbeiten, ist es schwierig, die Verwendung dieser Sprache zu rechtfertigen.
Parallelität; Spielt sich sehr gut mit der aufstrebenden Multi-Core-Technologie
Das Problem wird nur herumgeschubst. Mit unveränderlichen Datenstrukturen haben Sie eine günstige Thread-Sicherheit auf Kosten der möglichen Arbeit mit veralteten Daten. Mit veränderlichen Datenstrukturen haben Sie den Vorteil, dass Sie immer an neuen Daten arbeiten müssen, ohne komplizierte Logik schreiben zu müssen, um die Daten konsistent zu halten. Es ist nicht so, dass einer von ihnen offensichtlich besser ist als der andere.
Programme sind normalerweise kürzer und in einigen Fällen leichter zu lesen
Außer in den Fällen, in denen sie länger und schwerer zu lesen sind. Zu lernen, wie man Programme liest, die in einem funktionalen Stil geschrieben sind, ist eine schwierige Fähigkeit. Menschen scheinen Programme viel besser als eine Reihe von Schritten zu verstehen, die wie ein Rezept zu befolgen sind, als als eine Reihe von Berechnungen, die durchgeführt werden müssen.
Die Produktivität steigt (Beispiel: Erlang)
Die Produktivität muss stark steigen, um die massiven Kosten für die Einstellung von Programmierern zu rechtfertigen, die wissen, wie man in einem funktionalen Stil programmiert.
Und denken Sie daran, Sie möchten kein funktionierendes System wegwerfen. Die meisten Programmierer erstellen keine neuen Systeme von Grund auf neu, sondern warten vorhandene Systeme, von denen die meisten in nicht funktionierenden Sprachen erstellt wurden. Stellen Sie sich vor, Sie versuchen dies gegenüber den Aktionären zu rechtfertigen. Warum haben Sie Ihr bestehendes Lohn- und Gehaltsabrechnungssystem verschrottet, um ein neues zu bauen, das Millionen von Dollar kostet? "Weil funktionale Programmierung großartig ist" wird die Aktionäre wahrscheinlich nicht begeistern.
Imperative Programmierung ist ein sehr altes Paradigma (soweit ich weiß) und möglicherweise nicht für das 21. Jahrhundert geeignet
Auch die funktionale Programmierung ist sehr alt. Ich sehe nicht, wie das Alter des Konzepts relevant ist.
Versteh mich nicht falsch. Ich liebe funktionale Programmierung, ich bin diesem Team beigetreten, weil ich helfen wollte, Konzepte aus der funktionalen Programmierung in C # zu bringen, und ich denke, dass Programmierung in einem unveränderlichen Stil der Weg der Zukunft ist. Die Programmierung in einem funktionalen Stil ist jedoch mit enormen Kosten verbunden , die nicht einfach wegzuwünschen sind. Der Übergang zu einem funktionaleren Stil wird über Jahrzehnte hinweg langsam und schrittweise erfolgen. Und genau das wird es sein: eine Verlagerung hin zu einem funktionaleren Stil, keine umfassende Berücksichtigung der Reinheit und Schönheit von Haskell und der Aufgabe von C ++.
Ich baue Compiler, um meinen Lebensunterhalt zu verdienen, und wir setzen definitiv auf einen funktionalen Stil für die nächste Generation von Compiler-Tools. Das liegt daran, dass die funktionale Programmierung grundsätzlich gut zu den Problemen passt, mit denen wir konfrontiert sind. Bei unseren Problemen geht es darum, Rohdaten - Zeichenfolgen und Metadaten - aufzunehmen und in verschiedene Zeichenfolgen und Metadaten umzuwandeln. In Situationen, in denen Mutationen auftreten, wie z. B. wenn jemand die IDE eingibt, eignet sich der Problembereich von Natur aus für Funktionstechniken wie das schrittweise Neuerstellen nur der Teile des Baums, die sich geändert haben. Viele Domains haben diese netten Eigenschaften nicht, die sie offensichtlich für einen funktionalen Stil zugänglich machen .