it-swarm.com.de

Was sind die Vorteile der funktionalen Programmierung?

Welche Vorteile sehen Sie in der funktionalen Programmierung? Und wie wenden sie sich heute an Programmierer?

Was sind die größten Unterschiede zwischen funktionaler Programmierung und OOP?

90
Rayne

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 mit jeder Zelle etwas zu tun hat, würde man sagen, das Äquivalent von "diese Bezeichnung bezieht sich auf eine Version dieses Arrays, in der diese Funktion für alle ausgeführt wurde Elemente. "

Durch die funktionale Programmierung werden grundlegendere Programmierideen in den Compiler übernommen, z. B. Listenverständnisse und Caching.

Der größte Vorteil der funktionalen Programmierung liegt in der Kürze, da Code übersichtlicher sein kann. Ein funktionales Programm erstellt keine Iteratorvariable als Mittelpunkt einer Schleife, sodass dieser und andere Arten von Overhead aus Ihrem Code eliminiert werden.

Der andere große Vorteil ist die Parallelität, die bei der funktionalen Programmierung einfacher zu bewerkstelligen ist, da der Compiler sich um die meisten Vorgänge kümmert, bei denen Zustandsvariablen manuell eingerichtet werden mussten (z. B. der Iterator in einer Schleife).

Abhängig von der Art und Weise, in der das Programm geschrieben wird, können einige Leistungsvorteile auch im Zusammenhang mit einem einzelnen Prozessor gesehen werden, da die meisten funktionalen Sprachen und Erweiterungen eine verzögerte Auswertung unterstützen. In Haskell können Sie sagen, dass "diese Bezeichnung ein Array darstellt, das alle geraden Zahlen enthält". Solch ein Array ist unendlich groß, aber Sie können jederzeit nach dem 100.000sten Element dieses Arrays fragen, ohne zu wissen, welchen Wert Sie zum Zeitpunkt der Array-Initialisierung am meisten benötigen. Der Wert wird nur bei Bedarf berechnet und nicht weiter.

71
Chris Wenham

Der größte Vorteil ist, dass Sie nicht daran gewöhnt sind. Wählen Sie eine Sprache wie Schema und lernen Sie, Probleme damit zu lösen. So werden Sie ein besserer Programmierer in Sprachen, die Sie bereits kennen. Es ist wie das Erlernen einer zweiten menschlichen Sprache. Sie gehen davon aus, dass andere im Grunde genommen eine eigenständige Variante sind, weil Sie nichts zu vergleichen haben. Es ist aufschlussreich, sich anderen auszusetzen, insbesondere solchen, die nichts mit dem zu tun haben, was Sie bereits wissen.

27
Kirk Strauser

Warum funktionale Programmierung wichtig ist
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf

Zusammenfassung

Da Software immer komplexer wird, ist 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 von funktionalen Sprachen, Funktionen höherer Ordnung und verzögerte Auswertung, erheblich zur Modularität beitragen können. Als Beispiel manipulieren wir Listen und Bäume, programmieren mehrere numerische Algorithmen und implementieren die Alpha-Beta-Heuristik (ein Algorithmus aus der künstlichen Intelligenz, der in Spielprogrammen verwendet wird). Wir kommen zu dem Schluss, dass die funktionale Programmierung wichtige Vorteile für die Softwareentwicklung bietet, da Modularität der Schlüssel für eine erfolgreiche Programmierung ist.

11
Robert Harvey

Ein guter Ausgangspunkt wäre daher, zu versuchen, einige Dinge zu verstehen, die nicht in imperativen Sprachen, sondern in funktionalen Sprachen möglich sind.

Wenn es um Berechenbarkeit geht, gibt es natürlich nichts, was in der funktionalen, aber nicht in der imperativen Programmierung möglich ist (oder umgekehrt).

Der Sinn verschiedener Programmierparadigmen ist nicht, Dinge möglich zu machen, die vorher nicht möglich waren, sondern Dinge einfach zu machen, die vorher schwierig waren.

Funktionale Programmierung soll Ihnen das Schreiben von Programmen erleichtern, die übersichtlich, fehlerfrei und parallelisierbar sind.

10
sepp2k

Ich denke, das praktischste Beispiel für den Bedarf an funktionaler Programmierung ist die Parallelität - funktionale Programme sind von Natur aus threadsicher, und angesichts des Aufstiegs der Mehrkernhardware ist dies von äußerster Wichtigkeit.

Funktionale Programmierung erhöht auch die Modularität - Sie können häufig Methoden/Funktionen als Imperativ sehen, die viel zu lang sind - Sie werden so gut wie nie eine Funktion sehen, die länger als ein paar Zeilen ist. Und da alles entkoppelt ist, ist die Wiederverwendbarkeit erheblich verbessert und das Testen von Einheiten sehr einfach.

5
Bozhidar Batsov

Es muss nicht das eine oder andere sein: Wenn Sie eine Sprache wie C # 3.0 verwenden, können Sie die besten Elemente von jedem mischen. OO kann für die groß angelegte Struktur auf Klassenebene und darüber verwendet werden. Funktionsstil für die klein angelegte Struktur auf Methodenebene.

Durch die Verwendung des funktionalen Stils 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 dessen Richtigkeit zu überprüfen .

5
Samuel Jack

Sobald das Programm wächst, wird die Anzahl der Befehle in unserem Vokabular zu hoch, was die Verwendung sehr schwierig macht. Hier erleichtert die objektorientierte Programmierung unser Leben, weil wir dadurch unsere Befehle besser organisieren können. Wir können alle Befehle, die den Kunden betreffen, einer Kundenentität (einer Klasse) zuordnen, was die Beschreibung sehr viel klarer macht. Das Programm besteht jedoch immer noch aus einer Folge von Befehlen, mit denen festgelegt wird, wie es fortgesetzt werden soll.

Die funktionale Programmierung bietet eine völlig andere Möglichkeit, den Wortschatz zu erweitern. Nicht auf das Hinzufügen neuer primitiver Befehle beschränkt. Wir können auch neue Kontrollstrukturen hinzufügen - Grundelemente, die angeben, wie wir Befehle zusammensetzen können, um ein Programm zu erstellen. In imperativen Sprachen konnten wir Befehle in einer Sequenz oder mit einer begrenzten Anzahl eingebauter Konstrukte wie Schleifen erstellen. Wenn Sie sich jedoch typische Programme ansehen, werden Sie immer noch viele wiederkehrende Strukturen sehen. gemeinsame Möglichkeiten zum Kombinieren von Befehlen

3
Soner Gönül

Denken Sie nicht an funktionale Programmierung im Sinne eines "Bedürfnisses". Stellen Sie es sich stattdessen als eine andere Programmiertechnik vor, die Ihnen den Sinn öffnet, da OOP, Vorlagen, Assemblersprache usw. Ihre Denkweise möglicherweise völlig verändert haben, als Sie sie gelernt haben. Das Erlernen der funktionalen Programmierung macht Sie letztendlich zu einem besseren Programmierer.

1
Justin Ethier

Wenn Sie die funktionale Programmierung noch nicht kennen, bietet Ihnen das Lernen mehr Möglichkeiten, um Probleme zu lösen.

FP ist eine einfache Verallgemeinerung, die Funktionen zu erstklassigen Werten befördert, während OOP für die Strukturierung von Code in großem Maßstab 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.

0
Jon Harrop