Was sind Ihrer Meinung nach die Vorteile der funktionalen Programmierung? Und wie gelten sie heute für Programmierer?
Was sind die größten Unterschiede zwischen funktionaler Programmierung und OOP?
Was sind Ihrer Meinung nach die Vorteile der funktionalen Programmierung? Und wie gelten sie heute für Programmierer?
Was sind die größten Unterschiede zwischen funktionaler Programmierung und OOP?
Antworten:
Der Stil der funktionalen Programmierung besteht darin, zu beschreiben, was Sie wollen, und nicht, wie Sie es bekommen. Das heißt: Anstatt eine for-Schleife mit einer Iteratorvariablen zu erstellen und durch ein Array zu marschieren, das etwas mit jeder Zelle tut, würde man sagen, dass das Äquivalent von "Diese Bezeichnung bezieht sich auf eine Version dieses Arrays, in der diese Funktion für alle ausgeführt wurde Elemente. "
Durch funktionale Programmierung werden grundlegendere Programmierideen in den Compiler verschoben, z. B. Listenverständnis und Caching.
Der größte Vorteil der funktionalen Programmierung ist die Kürze, da der Code präziser sein kann. Ein Funktionsprogramm erstellt keine Iteratorvariable als Zentrum einer Schleife, sodass dieser und andere Arten von Overhead aus Ihrem Code entfernt werden.
Der andere große Vorteil ist die Parallelität, die mit der funktionalen Programmierung einfacher zu bewerkstelligen ist, da der Compiler die meisten Vorgänge erledigt, bei denen früher Statusvariablen manuell eingerichtet werden mussten (wie der Iterator in einer Schleife).
Abhängig von der Art und Weise, wie das Programm geschrieben wird, können einige Leistungsvorteile auch im Kontext eines einzelnen Prozessors gesehen werden, da die meisten funktionalen Sprachen und Erweiterungen eine verzögerte Auswertung unterstützen. In Haskell können Sie sagen "Diese Bezeichnung repräsentiert ein Array, das alle geraden Zahlen enthält". Ein solches Array ist unendlich groß, aber Sie können jederzeit nach dem 100.000sten Element dieses Arrays fragen, ohne zum Zeitpunkt der Array-Initialisierung wissen zu müssen, welchen Wert Sie am meisten benötigen. Der Wert wird nur berechnet, wenn Sie ihn benötigen, und nicht weiter.
Der größte Vorteil ist, dass es nicht das ist, was Sie gewohnt sind. Wählen Sie eine Sprache wie Scheme und lernen Sie, Probleme damit zu lösen, und Sie werden ein besserer Programmierer in Sprachen, die Sie bereits kennen. Es ist wie eine zweite menschliche Sprache zu lernen. Sie gehen davon aus, dass andere im Grunde genommen eine Variation für sich sind, weil Sie nichts zu vergleichen haben. Der Kontakt mit anderen, insbesondere mit Personen, die nichts mit dem zu tun haben, was Sie bereits wissen, ist aufschlussreich.
Warum funktionale Programmierung wichtig ist
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
Abstrakt
Da Software immer komplexer wird, wird es immer wichtiger, sie gut zu strukturieren. Gut strukturierte Software ist einfach zu schreiben und zu debuggen und bietet eine Sammlung von Modulen, die wiederverwendet werden können, um zukünftige Programmierkosten zu senken.
In diesem Artikel zeigen wir, dass insbesondere zwei Merkmale funktionaler Sprachen, Funktionen höherer Ordnung und eine verzögerte Bewertung, erheblich zur Modularität beitragen können. Als Beispiele manipulieren wir Listen und Bäume, programmieren mehrere numerische Algorithmen und implementieren die Alpha-Beta-Heuristik (ein Algorithmus aus künstlicher Intelligenz, der in Spielprogrammen verwendet wird). Wir schließen daraus, dass die funktionale Programmierung wichtige Vorteile für die Softwareentwicklung bietet, da Modularität der Schlüssel für eine erfolgreiche Programmierung ist.
Ein guter Ausgangspunkt wäre daher, zu versuchen, einige Dinge zu verstehen, die in imperativen Sprachen nicht möglich sind, aber in funktionalen Sprachen möglich sind.
Wenn Sie über Berechenbarkeit sprechen, gibt es natürlich nichts, was in der funktionalen, aber nicht zwingenden Programmierung möglich ist (oder umgekehrt).
Bei verschiedenen Programmierparadigmen geht es nicht darum, Dinge zu ermöglichen, die vorher nicht möglich waren, sondern darum, Dinge zu vereinfachen, die vorher schwierig waren.
Mit der funktionalen Programmierung können Sie Programme, die präzise, fehlerfrei und parallelisierbar sind, einfacher schreiben.
Es muss nicht das eine oder andere sein: Mit einer Sprache wie C # 3.0 können Sie die besten Elemente von jedem mischen. OO kann für die Struktur im großen Maßstab auf Klassenebene und darüber verwendet werden. Funktionsstil für die Struktur im kleinen Maßstab auf Methodenebene.
Durch die Verwendung des Funktionsstils kann Code geschrieben werden, der seine Absicht klar erklärt, ohne mit Kontrollflussanweisungen usw. verwechselt zu werden. Aufgrund der Prinzipien wie der nebenwirkungsfreien Programmierung ist es viel einfacher, über Code nachzudenken und seine Richtigkeit zu überprüfen .
Ich denke, das praktischste Beispiel für die Notwendigkeit einer funktionalen Programmierung ist die Parallelität - funktionale Programme sind natürlich threadsicher, und angesichts des Aufstiegs der Multi-Core-Hardware ist dies von äußerster Wichtigkeit.
Die funktionale Programmierung erhöht auch die Modularität - Sie können häufig Methoden / Funktionen im Imperativ sehen, die viel zu lang sind - Sie werden fast nie eine Funktion sehen, die länger als ein paar Zeilen ist. Und da alles entkoppelt ist, wird die Wiederverwendbarkeit erheblich verbessert und das Testen von Einheiten ist sehr, sehr einfach.
Sobald das Programm wächst, wird die Anzahl der Befehle in unserem Wortschatz zu hoch, was die Verwendung sehr schwierig macht. Hier erleichtert die objektorientierte Programmierung unser Leben, da wir unsere Befehle besser organisieren können. Wir können alle Befehle, an denen der Kunde beteiligt ist, einer Kundenentität (einer Klasse) zuordnen, wodurch die Beschreibung viel klarer wird. Das Programm ist jedoch immer noch eine Folge von Befehlen, die angeben, wie es fortfahren soll.
Die funktionale Programmierung bietet eine völlig andere Möglichkeit, den Wortschatz zu erweitern. Nicht beschränkt auf das Hinzufügen neuer primitiver Befehle; Wir können auch neue Kontrollstrukturen hinzufügen - Grundelemente, die angeben, wie Befehle zum Erstellen eines Programms zusammengestellt werden können. In imperativen Sprachen konnten wir Befehle in einer Sequenz oder mit einer begrenzten Anzahl integrierter Konstrukte wie Schleifen erstellen. Wenn Sie sich jedoch typische Programme ansehen, werden Sie immer noch viele wiederkehrende Strukturen sehen. gängige Methoden zum Kombinieren von Befehlen
Denken Sie nicht an funktionale Programmierung im Sinne eines "Bedarfs". Stellen Sie sich das stattdessen als eine andere Programmiertechnik vor, die Ihren Geist öffnet, genau wie OOP, Vorlagen, Assemblersprache usw. Ihre Denkweise möglicherweise völlig verändert haben, als Sie sie gelernt haben. Wenn Sie funktionale Programmierung lernen, werden Sie letztendlich zu einem besseren Programmierer.
Wenn Sie die funktionale Programmierung noch nicht kennen, erhalten Sie durch das Lernen mehr Möglichkeiten, Probleme zu lösen.
FP ist eine einfache Verallgemeinerung, die Funktionen zu erstklassigen Werten befördert, während OOP für die umfassende Strukturierung von Code vorgesehen ist. Es gibt jedoch einige Überschneidungen, bei denen OOP-Entwurfsmuster mit erstklassigen Funktionen direkt und viel prägnanter dargestellt werden können.
Viele Sprachen bieten sowohl FP als auch OOP, einschließlich OCaml, C # 3.0 und F #.
Prost, Jon Harrop.