In welchen Situationen sollte ich eine funktionale Programmiersprache anstelle einer ausführlicheren objektorientierten Sprache wie C ++, C # oder Java verwenden?
Ich verstehe, was funktionale Programmierung ist, was ich nicht wirklich verstehe, ist, für welche Arten von Problemen ist es eine perfekte Lösung?
functional-programming
language-agnostic
Alex Baranosky
quelle
quelle
Antworten:
Funktionale Sprachen eignen sich meiner Meinung nach hauptsächlich für zwei Dinge: Spiel-AIs und mathematische Berechnungen. Es ist gut in Spiel-AIs wegen seiner netten Listenmanipulationen (zumindest in Lisp und Scheme) und für mathematische Berechnungen wegen seiner Syntax. Scheme, Lisp und Haskell haben eine Syntax, mit der mathematische Berechnungen leicht zu lesen sind. Das Letzte, was ich hinzufügen muss, ist, dass funktionale Sprachen wirklich lustige Sprachen sind. Mein Scheme-Kurs war einer der Kurse, mit denen ich am meisten Spaß hatte.
quelle
Ich habe dies selbst recherchiert und dachte, ich könnte CONCURRENCY zur Liste der Gründe für die Verwendung einer funktionalen Sprache hinzufügen. In naher Zukunft wird die Prozessorgeschwindigkeit mit derselben CPU-Technologie nicht mehr steigen können. Die Physik der Architektur wird es nicht zulassen.
Hier kommt also die gleichzeitige Verarbeitung ins Spiel.
Leider können die meisten OOP-Sprachen aufgrund der gegenseitigen Abhängigkeiten zwischen Daten nicht mehrere Prozessoren gleichzeitig nutzen.
In reinen funktionalen Programmiersprachen kann der Computer zwei (oder viele weitere) Funktionen gleichzeitig ausführen, da diese Funktionen die Informationen außerhalb des Zustands nicht ändern.
Hier ist ein ausgezeichneter Artikel über funktionale Programmierung, den Sie vielleicht genießen werden.
quelle
Ein Freund von mir zitierte einen seiner College-Professoren mit folgenden Worten:
Meine Antwort ist, dass FP ein völlig praktikabler Ansatz für die Programmierung mit einem so breiten Anwendungsbereich wie OO ist. Wie bei jeder Diskussion über die Wahl der Programmiersprache denke ich, dass die wichtigeren Fragen sind:
In Bezug auf die erste Frage, wenn Sie dies hauptsächlich für den Lernwert tun, würde ich vorschlagen, sich Haskell anzusehen , da es eine breite Palette an Unterstützungsmaterialien gibt (Bücher, Artikel, aktive Community usw.).
Was die zweite Frage betrifft, hat Haskell eine schöne Auswahl an Bibliotheken (obwohl einige ausgereifter sind als andere), aber Scala (eine hybride OO-funktionale Sprache, die auf der JVM ausgeführt wird) hat die Vorteile, dass Sie schrittweise in den funktionalen Stil übergehen können , und Ihnen steht die gesamte Palette der für Java zugänglichen Bibliotheken zur Verfügung.
quelle
Praktisch alles, was Sie in PP tun können, kann in FP getan werden, und umgekehrt. Es ist nur eine andere Art, etwas zu codieren - eine andere Perspektive auf das Problem und eine andere Art, es zu lösen.
Da jedoch nicht viele Benutzer FP verwenden, liegt das Problem eher im Mangel an guten Bibliotheken, der Portabilität / Wartbarkeit (da der Betreuer eine bessere Chance hat, etwas zu verstehen, das in C ++ geschrieben ist als im Schema), und im Mangel an Dokumentation und Community. Ich weiß, dass es einige Dokumente gibt, aber vergleichen Sie das mit C ++, C # oder Java und Sie werden verstehen, was ich meine.
Wenn Sie jedoch wirklich FP ausführen möchten, können Sie diesen Stil auch in C ++ und C # verwenden. Natürlich wird es kein 100% FP sein, wenn Sie die Standardbibliothek verwenden. Leider glaube ich nicht, dass C # für die Verwendung mit funktionaler Programmierung optimiert ist, und es wird wahrscheinlich viele Leistungsprobleme verursachen.
Dies ist eher ein subjektiver Beitrag, was ich über FP denke. Es ist keine strenge Erklärung.
quelle
Funktionale Sprachen sind in vielen Situationen gut. Dies hängt von den Bibliotheken einer bestimmten Funktionssprache ab.
Wie würden Sie die Frage "Wann sollte eine objektorientierte Programmiersprache verwendet werden?" Beantworten?
quelle
Obwohl dies eine subjektive Frage ist, möchte ich nur hinzufügen, dass funktionale Sprachen häufig zum Parsen domänenspezifischer Sprachen verwendet werden . Die funktionale Natur eignet sich gut zum Parsen von Grammatiken.
quelle
Nach allem, was ich gesehen habe, ist es eher eine Frage des Geschmacks als der Funktionalität (kein Wortspiel beabsichtigt). Es gibt wirklich nichts an einem Sprachstil, was es bei bestimmten Aufgaben von Natur aus besser oder schlechter macht.
quelle
Verwenden Sie im Allgemeinen die Sprache, in der es am einfachsten ist, die Lösung eines Problems auszudrücken. Für die funktionale Programmierung ist dies der Fall, wenn die Lösung eines Problems leicht in Funktionen ausgedrückt werden kann , daher der Name. Im Allgemeinen ist es gut für mathematische Operationen, KI, Mustervergleich; Im Allgemeinen alles, was in eine Reihe von Regeln zerlegt werden kann, die angewendet werden müssen, um eine Antwort zu erhalten. Sie können die "beste" Sprache erst dann wirklich bestimmen, wenn Sie Ihr Problem ausreichend analysiert haben. Hier bietet sich Pseudocode an. Wenn Sie feststellen, dass Sie Pseudocode schreiben, der wie FP aussieht, verwenden Sie FP.
Natürlich sind alle vollständigen Programmiersprachen funktional gleichwertig, daher spielt es keine Rolle, welche Sie auswählen, um welche Probleme Sie lösen können. Die Haupteffekte betreffen die Effizienz und Genauigkeit der Codierung sowie die einfache Wartung.
Beachten Sie auch, dass es möglich ist, FP in OO-Sprachen durch clever gestaltete APIs nachzuahmen. Ich habe zum Beispiel zahlreiche Java-Bibliotheken gesehen (JMock ist ein Beispiel), die Methodenverkettung verwenden, um ein FP-DSL zu simulieren. Dann sehen Sie Konstrukte wie:
logger.expects(once()).method("error") .with( and(stringContains(action),stringContains(cause)) );
Dadurch wird im Wesentlichen eine Funktion erstellt, die ausgewertet wird, um festzustellen, ob eine Aufrufsequenz für ein Scheinobjekt korrekt ist. (Beispiel gestohlen von http://www.jmock.org/yoga.html )
Eine andere FP-ähnliche Syntax in anderen OO-Sprachen ist die Verwendung von Verschlüssen, z. B. in Ruby.
quelle