Ich habe kürzlich zum Spaß F # gelernt (ich bin ein VB.NET/C# -Entwickler) und ich mag einige der Angebote wirklich. Theoretisch ist das so. Aber ich habe Probleme, mir Szenarien auszudenken, in denen ich lieber in F # als in C # codieren würde. Irgendwelche Ideen?
programming-languages
functional-programming
f#
System ausgefallen
quelle
quelle
F#
ist nicht vollständig repräsentativ für die funktionale Programmierung. Versuchen Sie esClojure
stattdessen.Antworten:
Einige Argumente für eine reine funktionale Programmierung:
Eine vollständige Behandlung finden Sie unter Warum funktionale Programmierung wichtig ist und warum funktionale Programmierung wichtig ist .
quelle
Von hier aus :
Asynchrone Server
Metaprogrammierung (zB Parsing)
Technisches Rechnen
GUI-Anwendungen
Logikprogrammierung
Testen
Performance
inline
für eine kostenlose Abstraktion höherer Ordnung.quelle
Hier ist, wofür die Programmierung mit funktionalem Stil verwendet wird - mehr oder weniger täglich.
Wir machen viele statistische und versicherungsmathematische Dinge mit ziemlich großen Datenmengen. Die aus der Datenbank abgerufenen Daten sind - im Wesentlichen statische, unveränderliche Objekte. Kein Grund, eine Klasse mit Methoden zu erstellen.
In jeder Phase der Berechnung werden einige zusätzliche Details hinzugefügt, das Objekt wird jedoch nicht wesentlich mutiert. Am "Ende" der Pipeline machen wir wirklich eine ausgefallene Reduzierung, um Summen und Zählungen und andere Dinge zu berechnen.
Stell dir das vor.
Jede "Phase" der Berechnung ist eine funktionale Programmierschleife, die eine einfache Lese-Berechnungs-Ausbeute ausführt und ein zusammengesetztes Objekt aus anderen Dingen und Ergebnissen erstellt.
(Wir verwenden Python, daher die funktionale Programmierung mit Generatorfunktionen.)
Es ist einfacher, zustandslose, unveränderliche Objekte zu verwenden.
quelle
criteria() |> some_query |> calculate |> enrich |> summarize
Ich finde, dass der Vorwärtsrohrbetreiber zu klarerem Code führen kann, aber ich schweife ab.map
um den gleichen Effekt zu erzielen.Technisch gesehen ist es keine eindeutige Eigenschaft einer funktionalen Programmierung, und F # ist keine reine funktionale Sprache. F # bietet als einer der ML-Nachkommen einen hervorragenden Mustervergleich und algebraische Datentypen. Für jede Aufgabe, die komplexe Datenstrukturen erfordert, ist F # viel aussagekräftiger und benutzerfreundlicher als C #.
Stellen Sie sich vor, Sie implementieren einen Compiler in C # und F # - er stellt einen abstrakten Syntaxbaum dar und transformiert ihn. Dies ist viel einfacher, wenn Ihre Sprache ADTs und einen Mustervergleich bereitstellt.
quelle
Ideal für kartenreduzierte massive Multisystem- und massive Multi-Core-Parallelität. Ziemlich cool, wenn man bedenkt, dass Einstiegsserver heutzutage mit 48 Kernen (96 mit HT) ausgestattet sind.
quelle
Wenn Sie voll funktionsfähig sein möchten, probieren Sie Haskell, Erlang hat auch einige sehr coole Sachen.
Simon Payton-Jones sagte über Haskell, er wolle ein Programm haben, das offensichtlich keine Fehler enthält, anstatt keine offensichtlichen Fehler zu haben.
(Ich habe das Zitat wahrscheinlich etwas falsch verstanden, aber Sie haben die Idee)
Indem Sie Nebenwirkungen einschränken, können Sie die Richtigkeit Ihres Codes viel einfacher nachweisen.
quelle
Ein klarer Vorteil ist, dass es viel einfacher parallelisiert werden kann.
quelle