Frage

Ich sehe hier viel Gerede über funktionale Sprachen und so.Warum sollten Sie eine gegenüber einer „traditionellen“ Sprache verwenden?Was machen sie besser?Was können sie schlechter?Was ist die ideale funktionale Programmieranwendung?

War es hilfreich?

Lösung

Funktionale Sprachen verwenden ein anderes Paradigma als imperative und objektorientierte Sprachen.Sie verwenden nebenwirkungsfreie Funktionen als Grundbaustein in der Sprache.Das ermöglicht vieles und macht vieles schwieriger (oder in den meisten Fällen anders, als man es gewohnt ist).

Einer der größten Vorteile der funktionalen Programmierung besteht darin, dass die Reihenfolge der Ausführung nebenwirkungsfreier Funktionen keine Rolle spielt.In Erlang wird dies beispielsweise verwendet, um Parallelität auf sehr transparente Weise zu ermöglichen.Und da sich Funktionen in funktionalen Sprachen sehr ähnlich verhalten wie mathematische Funktionen, ist es einfach, diese in funktionale Sprachen zu übersetzen.In einigen Fällen kann dies die Lesbarkeit des Codes verbessern.

Einer der großen Nachteile der funktionalen Programmierung war traditionell auch das Fehlen von Nebenwirkungen.Es ist sehr schwierig, nützliche Software ohne IO zu schreiben, aber IO ist schwer ohne Nebenwirkungen in Funktionen zu implementieren.Daher haben die meisten Menschen nie mehr aus der funktionalen Programmierung herausgeholt, als eine einzelne Ausgabe aus einer einzelnen Eingabe zu berechnen.In modernen Sprachen mit gemischten Paradigmen wie F# oder Scala ist dies einfacher.

Viele moderne Sprachen enthalten Elemente aus funktionalen Programmiersprachen.C# 3.0 verfügt über viele funktionale Programmierfunktionen und Sie können auch funktionale Programmierung in Python durchführen.Ich denke, die Gründe für die Beliebtheit der funktionalen Programmierung liegen hauptsächlich in zwei Gründen:Parallelität wird in der normalen Programmierung zu einem echten Problem, da wir immer mehr Multiprozessor-Computer einsetzen;und die Sprachen werden zugänglicher.

Andere Tipps

Ich glaube nicht, dass es irgendeinen Zweifel daran gibt, dass sich der funktionale Ansatz beim Programmieren durchsetzt, da er (als Programmierstil) seit etwa 40 Jahren verwendet wird.Immer wenn ein OO-Programmierer sauberen Code schreibt, der unveränderliche Objekte bevorzugt, übernimmt dieser Code funktionale Konzepte.

Allerdings Sprachen, die erzwingen Ein funktionaler Stil erhält heutzutage viel virtuelle Tinte, und ob diese Sprachen in Zukunft dominant werden, ist eine offene Frage.Mein eigener Verdacht ist, dass hybride Sprachen mit mehreren Paradigmen wie z Scala oder OCamlwird wahrscheinlich über „puristische“ funktionale Sprachen dominieren, genauso wie reine OO-Sprachen (Smalltalk, Beta usw.) die Mainstream-Programmierung beeinflusst haben, aber nicht zu den am weitesten verbreiteten Notationen geworden sind.

Abschließend kann ich nicht widerstehen, darauf hinzuweisen, dass Ihre Kommentare zu FP in hohem Maße mit den Bemerkungen übereinstimmen, die ich vor nicht allzu vielen Jahren von prozeduralen Programmierern gehört habe:

  • Der (meiner Meinung nach mythische) „durchschnittliche“ Programmierer versteht es nicht.
  • Es wird nicht allgemein gelehrt.
  • Jedes Programm, das Sie damit schreiben können, kann mit aktuellen Techniken auf andere Weise geschrieben werden.

So wie grafische Benutzeroberflächen und „Code als Geschäftsmodell“ Konzepte waren, die dazu beigetragen haben, dass OO eine größere Wertschätzung erlangte, glaube ich, dass die verstärkte Nutzung von Unveränderlichkeit und einfacherer (massiver) Parallelität mehr Programmierern helfen wird, die Vorteile des funktionalen Ansatzes zu erkennen .Aber so viel wie wir gelernt haben in den letzten etwa 50 Jahren die die gesamte Geschichte der digitalen Computerprogrammierung ausmachen, müssen wir meiner Meinung nach noch viel lernen.In zwanzig Jahren werden Programmierer voller Erstaunen auf die primitive Natur der Tools zurückblicken, die wir derzeit verwenden. einschließlich die mittlerweile beliebten OO- und FP-Sprachen.

Der Hauptvorteil ist für mich die inhärente Parallelität, insbesondere da wir uns jetzt von mehr MHz hin zu immer mehr Kernen bewegen.

Ich glaube nicht, dass es das nächste Programmierparadigma wird und OO-Methoden vollständig ersetzen wird, aber ich denke, wir werden an den Punkt kommen, an dem wir entweder einen Teil unseres Codes in einer funktionalen Sprache schreiben müssen oder unsere Allzwecksprachen dies tun werden wachsen, um mehr funktionale Konstrukte einzuschließen.

Auch wenn Sie beruflich nie mit einer funktionalen Sprache arbeiten, werden Sie durch das Verständnis der funktionalen Programmierung ein besserer Entwickler sein.Es wird Ihnen eine neue Perspektive auf Ihren Code und Ihre Programmierung im Allgemeinen geben.

Ich sage, es gibt keinen Grund, es nicht zu lernen.

Ich denke, dass die Sprachen, denen es gut gelingt, funktionalen und imperativen Stil zu vermischen, am interessantesten sind und die größten Erfolgsaussichten haben.

Ich bin immer skeptisch, was das nächste große Ding angeht.Oftmals ist das nächste große Ding ein reiner Zufall der Geschichte, es ist zur richtigen Zeit am richtigen Ort, unabhängig davon, ob die Technologie gut ist oder nicht.Beispiele:C++, Tcl/Tk, Perl.Allesamt fehlerhafte Technologien, alle überaus erfolgreich, weil man davon ausging, dass sie entweder die Probleme der Zeit lösten oder mit etablierten Standards nahezu identisch waren, oder beides.Funktionale Programmierung mag zwar großartig sein, aber das bedeutet nicht, dass sie übernommen wird.

Aber ich dürfen Sag dir, warum die Leute so sind aufgeregt über funktionale Programmierung:Viele, viele Programmierer haben eine Art „Konvertierungserfahrung“ gemacht, bei der sie entdecken, dass sie durch die Verwendung einer funktionalen Sprache doppelt so produktiv (oder vielleicht zehnmal so produktiv) sind und gleichzeitig Code produzieren, der widerstandsfähiger gegen Änderungen ist und weniger Fehler aufweist.Diese Leute halten funktionale Programmierung für eine Geheimwaffe;Ein gutes Beispiel für diese Denkweise ist die von Paul Graham Den Durchschnitt übertreffen.Oh, und seine Bewerbung?E-Commerce-Web-Apps.

Seit Anfang 2006 gibt es auch einige Diskussionen über funktionale Programmierung und Parallelität.Da die Leute mögen Simon Peyton Jones Da ich mir schon seit mindestens 1984 hin und wieder Gedanken über Parallelität mache, halte ich nicht den Atem an, bis funktionale Sprachen das Multicore-Problem lösen.Aber es erklärt einige der zusätzlichen Begeisterung, die derzeit herrscht.

Im Allgemeinen leisten amerikanische Universitäten in der Lehre der funktionalen Programmierung schlechte Arbeit.Es gibt einen starken Kern der Unterstützung für Einführung in die Programmierung mit Scheme, und Haskell genießt dort auch etwas Unterstützung, aber es gibt kaum Möglichkeiten, fortgeschrittene Techniken für funktionale Programmierer zu lehren.Ich habe einen solchen Kurs in Harvard unterrichtet und werde dies auch in diesem Frühjahr an der Tufts tun.Benjamin Pierce hat einen solchen Kurs an der Penn unterrichtet.Ich weiß nicht, ob Paul Hudak in Yale etwas getan hat.Die europäischen Universitäten machen einen viel besseren Job;Beispielsweise wird die funktionale Programmierung an wichtigen Orten in Dänemark, den Niederlanden, Schweden und dem Vereinigten Königreich betont.Ich habe weniger Ahnung davon, was in Australasien passiert.

Ich sehe hier im Raum niemanden, der den Elefanten erwähnt, also denke ich, dass es an mir liegt :)

JavaScript ist eine funktionale Sprache.Da immer mehr Menschen komplexere Dinge mit JS machen und insbesondere die Feinheiten von jQuery, Dojo und anderen Frameworks nutzen, wird FP durch die Hintertür des Webentwicklers eingeführt.

In Verbindung mit Schließungen macht FP JS-Code wirklich leicht und dennoch lesbar.

Prost, Ps

Die meisten Anwendungen sind einfach genug, um auf normale OO-Methoden gelöst zu werden

  1. OO -Wege waren nicht immer "normal". Der Standard dieses Jahrzehnts war das marginalisierte Konzept des letzten Jahrzehnts.

  2. Funktionale Programmierung ist Mathematik. Paul Graham über Lisp (Ersatzfunktionsprogrammierung für Lisp):

Die kurze Erklärung, warum diese Sprache aus den 1950er Jahren nicht veraltet ist, ist, dass es sich nicht um Technologie, sondern Mathematik und Mathematik wird nicht veraltet.Das Richtige, um Lisp zu vergleichen, ist nicht die Hardware der 1950er Jahre, sondern beispielsweise der 1960 entdeckte Quicksort-Algorithmus und ist immer noch die schnellste Generalsperrart.

Ich wette, Sie wussten nicht, dass Sie funktionale Programmierung betreiben, als Sie Folgendes verwendet haben:

  • Excel-Formeln
  • Quarzkomponist
  • JavaScript
  • Logo (Schildkrötengrafik)
  • LINQ
  • SQL
  • Unterstrichen.js (oder lodash), d3

Der durchschnittliche Unternehmensprogrammierer, z.Die meisten Menschen, mit denen ich zusammenarbeite, werden es nicht verstehen und die meisten Arbeitsumgebungen lassen Sie nicht darin programmieren, darin zu programmieren

Das ist allerdings nur eine Frage der Zeit.Ihr durchschnittlicher Unternehmensprogrammierer lernt, was auch immer das aktuelle Big Thing ist.Vor 15 Jahren haben sie OOP nicht verstanden.WENN FP fängt an, Ihre „durchschnittlichen Unternehmensprogrammierer“ werden folgen.

Es wird an Universitäten nicht wirklich gelehrt (oder ist es heutzutage?)

Variiert sehr.An meiner Universität ist SML die allererste Sprache, die Studenten kennengelernt wird.Ich glaube, dass das MIT LISP als Erstsemesterkurs unterrichtet.Diese beiden Beispiele mögen natürlich nicht repräsentativ sein, aber ich glaube, dass die meisten Universitäten zumindest einige optionale Kurse zu FP anbieten, auch wenn sie diese nicht zu einem obligatorischen Teil des Lehrplans machen.

Die meisten Anwendungen sind einfach genug, um auf normale Weise gelöst zu werden

Dabei geht es nicht wirklich darum, ob es „einfach genug“ ist.Wäre eine Lösung einfacher (oder besser lesbar, robust, elegant, performant) in FP?Viele Dinge sind „einfach genug, um in Java gelöst zu werden“, aber es erfordert immer noch eine Menge Code.

Bedenken Sie auf jeden Fall, dass FP-Befürworter seit mehreren Jahrzehnten behaupten, es sei das nächste große Ding.Vielleicht haben sie Recht, aber denken Sie daran, dass sie das nicht hatten, als sie vor 5, 10 oder 15 Jahren die gleiche Behauptung aufstellten.

Eine Sache, die jedoch definitiv zu ihren Gunsten zählt, ist, dass C# in letzter Zeit eine starke Wendung in Richtung FP vollzogen hat, und zwar in einem Ausmaß, dass es praktisch eine ganze Generation von Programmierern zu FP-Programmierern macht. ohne dass sie es überhaupt merken.Das könnte den Weg für die FP-„Revolution“ ebnen.Vielleicht.;)

Der Mensch kann die Perfektion und Unvollkommenheit seiner gewählten Kunst nicht verstehen, wenn er den Wert anderer Künste nicht erkennt.Das Befolgen von Regeln ermöglicht nur eine technische Entwicklung bis zu einem bestimmten Punkt, und dann muss der Schüler und Künstler mehr lernen und weiter streben.Es ist sinnvoll, neben der Strategie auch andere Künste zu studieren.

Wer hat nicht schon durch das Beobachten der Aktivitäten anderer etwas mehr über sich selbst erfahren?Um das Schwert zu lernen, studiere die Gitarre.Um das erste zu lernen, studieren Sie Handel.Das bloße Studium des Schwertes wird dich engstirnig machen und dir nicht erlauben, nach außen zu wachsen.

– Miyamoto Musashi, „Ein Buch der fünf Ringe“

Ein Schlüsselmerkmal einer funktionalen Sprache ist das Konzept erstklassiger Funktionen.Die Idee ist, dass Sie Funktionen als Parameter an andere Funktionen übergeben und diese als Werte zurückgeben können.

Bei der funktionalen Programmierung geht es darum, Code zu schreiben, der seinen Zustand nicht ändert.Der Hauptgrund hierfür besteht darin, dass aufeinanderfolgende Aufrufe einer Funktion zum gleichen Ergebnis führen.Sie können Funktionscode in jeder Sprache schreiben, die erstklassige Funktionen unterstützt. Es gibt jedoch Sprachen wie Haskell, in denen Sie den Status nicht ändern können.Tatsächlich sollten Sie überhaupt keine Nebenwirkungen haben (wie das Ausdrucken von Text) – was sich anhört, als wäre es völlig nutzlos.

Haskell verwendet stattdessen einen anderen Ansatz für IO:Monaden.Hierbei handelt es sich um Objekte, die die gewünschte E/A-Operation enthalten, die von der obersten Ebene Ihres Interpreters ausgeführt werden soll.Auf jeder anderen Ebene sind sie einfach Objekte im System.

Welche Vorteile bietet die funktionale Programmierung?Die funktionale Programmierung ermöglicht eine Codierung mit weniger Fehlerpotenzial, da jede Komponente vollständig isoliert ist.Darüber hinaus ermöglicht die Verwendung von Rekursion und erstklassigen Funktionen einfache Korrektheitsnachweise, die typischerweise die Struktur des Codes widerspiegeln.

Ich glaube nicht, dass die meisten realistischen Menschen glauben, dass sich funktionale Programmierung durchsetzen wird (wie OO zum Hauptparadigma wird).Schließlich handelt es sich bei den meisten Geschäftsproblemen nicht um hübsche mathematische Probleme, sondern um haarsträubende zwingende Regeln zum Verschieben von Daten und deren Darstellung auf verschiedene Arten, was bedeutet, dass sie nicht gut für ein rein funktionales Programmierparadigma geeignet sind (die Lernkurve von Monad übersteigt die von OO bei weitem).

OTOH, funktionale Programmierung macht Programmieren zum Spaß.Es lässt Sie die inhärente, zeitlose Schönheit prägnanter Ausdrücke der zugrunde liegenden Mathematik des Universums schätzen.Man sagt, dass man durch das Erlernen funktionaler Programmierung ein besserer Programmierer wird.Das ist natürlich höchst subjektiv.Ich persönlich glaube auch nicht, dass das ganz stimmt.

Es macht dich zu einem besseren fühlenden Wesen.

Ich muss schwerfällig sein, aber ich verstehe es immer noch nicht.Gibt es tatsächliche Beispiele für kleine Apps, die in einer funktionalen Sprache wie F# geschrieben sind, bei denen Sie sich den Quellcode ansehen und sehen können, wie und warum es besser war, einen solchen Ansatz zu verwenden als beispielsweise C#?

Ich möchte darauf hinweisen, dass alles, was Sie über funktionale Sprachen gesagt haben, vor etwa 20 Jahren von den meisten Menschen über objektorientierte Sprachen gesagt wurde.Damals hörte man häufig von OO:

* The average corporate programmer, e.g. most of the people I work with, will not understand it and most work environments will not let you program in it
* It's not really taught at universities (or is it nowadays?)
* Most applications are simple enough to be solved in normal IMPERATIVE ways

Veränderung muss von irgendwoher kommen.Eine sinnvolle und wichtige Veränderung wird sich vollziehen, unabhängig davon, ob Personen, die in früheren Technologien geschult sind, der Meinung sind, dass Veränderungen nicht notwendig sind.Finden Sie, dass der Wechsel zu OO trotz all der Leute, die damals dagegen waren, gut war?

F# könnte sich durchsetzen, weil Microsoft es vorantreibt.

Profi:

  • F# wird Teil der nächsten Version von Visual Studio sein
  • Microsoft baut seit einiger Zeit eine Community auf – Evangelisten, Bücher, Berater, die mit hochkarätigen Kunden zusammenarbeiten, und bedeutende Präsenz auf MS-Konferenzen.
  • F# ist eine erstklassige .Net-Sprache und die erste funktionale Sprache, die über eine wirklich umfangreiche Grundlage verfügt (ich sage nicht, dass Lisp, Haskell, Erlang, Scala, OCaml nicht viele Bibliotheken haben, sie sind einfach nicht so vollständig wie .Net). Ist)
  • Starke Unterstützung für Parallelität

Kontra:

  • F# ist sehr schwer zu starten, selbst wenn man gut mit C# und .Net ist – zumindest für mich :(
  • Es wird wahrscheinlich schwierig sein, gute F#-Entwickler zu finden

Deshalb gebe ich F# eine Chance von 50:50, wichtig zu werden.Andere funktionale Sprachen werden es in naher Zukunft nicht schaffen.

Ich denke, ein Grund ist das Manche Menschen sind der Meinung, dass der wichtigste Faktor für die Akzeptanz einer Sprache darin besteht, wie gut die Sprache ist.Leider sind die Dinge selten so einfach.Ich würde zum Beispiel argumentieren, dass der größte Faktor für die Akzeptanz von Python nicht die Sprache selbst ist (obwohl das Ist ziemlich wichtig).Der Hauptgrund, warum Python so beliebt ist, ist seine riesige Standardbibliothek und die noch größere Community von Bibliotheken von Drittanbietern.

Sprachen wie Clojure oder F# stellen in dieser Hinsicht möglicherweise die Ausnahme von der Regel dar, da sie auf der JVM/CLR basieren.Daher habe ich keine Antwort darauf.

Die meisten Anwendungen können in [Geben Sie Ihre bevorzugte Sprache, Ihr bevorzugtes Paradigma usw. ein] gelöst werden.Hier].

Obwohl dies wahr ist, können unterschiedliche Tools zur Lösung unterschiedlicher Probleme eingesetzt werden.Functional ermöglicht lediglich eine weitere Abstraktion auf hoher (höherer?) Ebene, die es uns ermöglicht, unsere Arbeit bei korrekter Verwendung effektiver zu erledigen.

Es scheint mir, dass diejenigen, die als Student nie Lisp oder Scheme gelernt haben, es jetzt entdecken.Wie bei vielen Dingen in diesem Bereich besteht die Tendenz, einen Hype zu betreiben und hohe Erwartungen zu wecken ...

Es wird vergehen.

Funktionale Programmierung ist großartig.Es wird jedoch nicht die Welt erobern.C, C++, Java, C# usw. wird es weiterhin geben.

Ich denke, dass daraus mehr sprachübergreifende Fähigkeiten entstehen werden – zum Beispiel die Implementierung von Dingen in einer funktionalen Sprache und die Bereitstellung des Zugriffs darauf in anderen Sprachen.

Beim Lesen von „Die nächste Mainstream-Programmiersprache“:„A Game Developer’s Perspective“ von Tim Sweeney, Epic Games, mein erster Gedanke war – ich muss Haskell lernen.

PPT

Googles HTML-Version

Die Dinge bewegen sich schon seit einiger Zeit in eine funktionale Richtung.Die beiden coolen Neulinge der letzten Jahre, Ruby und Python, sind beide radikal näher an funktionalen Sprachen als ihre Vorgänger – so sehr, dass einige Lisper begonnen haben, die eine oder andere als „nahe genug“ zu unterstützen.

Und da die massiv parallele Hardware einen evolutionären Druck auf alle ausübt – und funktionale Sprachen am besten geeignet sind, mit den Änderungen umzugehen – ist es kein so großer Sprung wie früher zu glauben, dass Haskell oder F# das nächste große Ding sein werden.

Haben Sie in letzter Zeit die Entwicklung der Programmiersprachen verfolgt?Jede neue Version aller gängigen Programmiersprachen scheint immer mehr Funktionen aus der funktionalen Programmierung zu übernehmen.

  • Abschlüsse, anonyme Funktionen sowie das Übergeben und Zurückgeben von Funktionen als Werte waren früher exotische Funktionen, die nur Lisp- und ML-Hackern bekannt waren.Aber nach und nach haben C#, Delphi, Python, Perl und Javascript Unterstützung für Abschlüsse hinzugefügt.Ohne Abschlüsse kann keine aufstrebende Sprache ernst genommen werden.

  • Mehrere Sprachen, insbesondere Python, C# und Ruby, bieten native Unterstützung für Listenverständnis und Listengeneratoren.

  • ML war 1973 der Pionier der generischen Programmierung, aber die Unterstützung von Generika („parametrischer Polymorphismus“) ist erst in den letzten etwa fünf Jahren zum Industriestandard geworden.Wenn ich mich richtig erinnere, unterstützte Fortran 2003 Generika, gefolgt von Java 2004, C# im Jahr 2005 und Delphi im Jahr 2008.(Ich weiß, dass C++ seit 1979 Vorlagen unterstützt, aber 90 % der Diskussionen über C++s STL beginnen mit „Hier gibt es Dämonen“.)

Was macht diese Funktionen für Programmierer attraktiv?Es sollte klar sein: Es hilft Programmierern, kürzeren Code zu schreiben.Alle Sprachen werden in Zukunft zumindest Schließungen unterstützen, wenn sie wettbewerbsfähig bleiben wollen.Insofern ist funktionale Programmierung bereits im Mainstream angekommen.

Die meisten Anwendungen sind einfach genug, um auf normale Weise gelöst zu werden

Wer sagt, dass funktionale Programmierung nicht auch für einfache Dinge verwendet werden kann?Nicht jedes funktionale Programm muss ein Compiler, ein Theorembeweiser oder ein massiv paralleler Telekommunikationsschalter sein.Zusätzlich zu meinen komplizierteren Projekten verwende ich F# regelmäßig für Ad-hoc-Wegwerfskripte.

Es setzt sich durch, weil es das beste Tool zur Beherrschung der Komplexität ist.Sehen:
- Folien 109–116 des Vortrags von Simon Peyton-Jones „A Taste of Haskell“
- „Die nächste Mainstream-Programmiersprache:Die Perspektive eines Spieleentwicklers“ von Tim Sweeney

Ich stimme dem ersten Punkt zu, aber die Zeiten ändern sich.Unternehmen werden reagieren, auch wenn sie späte Anwender sind, wenn sie erkennen, dass sich daraus ein Vorteil ergibt.Das Leben ist dynamisch.

Sie unterrichteten Ende der 90er Jahre Haskell und ML in Stanford.Ich bin sicher, dass Orte wie Carnegie Mellon, MIT, Stanford und andere gute Schulen es den Schülern präsentieren.

Ich stimme zu, dass die meisten Apps zur „Offenlegung relationaler Datenbanken im Web“ noch lange in diesem Sinne bleiben werden.Java EE, .NET, RoR und PHP haben einige ziemlich gute Lösungen für dieses Problem entwickelt.

Sie haben etwas Wichtiges entdeckt:Möglicherweise handelt es sich um ein Problem, das mit anderen Mitteln, die die funktionale Programmierung fördern, nicht einfach gelöst werden kann.Was würde das sein?

Werden massive Multicore-Hardware und Cloud Computing sie vorantreiben?

Denn FP bietet erhebliche Vorteile hinsichtlich Produktivität, Zuverlässigkeit und Wartbarkeit.Many-Core könnte eine Killer-App sein, die schließlich große Unternehmen dazu bringt, trotz großer Mengen an Legacy-Code umzusteigen. Darüber hinaus nehmen selbst große kommerzielle Sprachen wie C# aufgrund von Many-Core-Bedenken – einfach Nebenwirkungen – eine ausgeprägte funktionale Note an passen nicht gut zu Parallelität und Parallelität.

Ich bin nicht der Meinung, dass „normale“ Programmierer es nicht verstehen.Sie werden es tun, genau wie sie schließlich OOP verstanden haben (was genauso mysteriös und seltsam ist, wenn nicht sogar noch mysteriöser).

Außerdem unterrichten die meisten Universitäten FP, viele unterrichten es sogar als ersten Programmierkurs.

Wow – das ist eine interessante Diskussion.Meine eigenen Gedanken dazu:

FP macht einige Aufgaben relativ einfach (im Vergleich zu Nicht-FP-Sprachen).Nicht-FP-Sprachen beginnen bereits, Ideen von FP zu übernehmen, daher vermute ich, dass sich dieser Trend fortsetzen wird und wir eher eine Zusammenführung erleben werden, die den Leuten den Sprung zu FP erleichtern dürfte.

Ich weiß nicht, ob es sich durchsetzen wird oder nicht, aber meinen Untersuchungen zufolge lohnt es sich mit ziemlicher Sicherheit, eine funktionale Sprache zu erlernen und Sie zu einem besseren Programmierer zu machen.Allein das Verständnis der referenziellen Transparenz macht viele Designentscheidungen viel einfacher – und die daraus resultierenden Programme sind viel einfacher zu überdenken.Wenn Sie auf ein Problem stoßen, handelt es sich grundsätzlich nur um ein Problem mit der Ausgabe einer einzelnen Funktion und nicht um ein Problem mit einem inkonsistenten Zustand, der durch eine der Hunderten von Klassen/Methoden/Funktionen verursacht worden sein könnte in einer imparativen Sprache mit Nebenwirkungen.

Die zustandslose Natur von FP passt natürlicher zur zustandslosen Natur des Webs, und daher eignen sich funktionale Sprachen leichter für elegantere, RUHIGE Webanwendungen.Im Gegensatz zu JAVA- und .NET-Frameworks, die auf schrecklich hässliche HACKS wie VIEWSTATE- und SESSION-Schlüssel zurückgreifen müssen, um den Anwendungsstatus aufrechtzuerhalten und die (gelegentlich recht undichte) Abstraktion einer zustandsbehafteten imperativen Sprache auf einer im Wesentlichen zustandslosen Funktionsplattform wie dem Web aufrechtzuerhalten.

Und je zustandsloser Ihre Anwendung ist, desto leichter eignet sie sich für die Parallelverarbeitung.Furchtbar wichtig für das Web, wenn Ihre Website zufällig populär wird.Es ist nicht immer einfach, einer Site einfach mehr Hardware hinzuzufügen, um eine bessere Leistung zu erzielen.

Meiner Meinung nach wird es sich jetzt durchsetzen, da Microsoft es viel weiter in den Mainstream gedrängt hat.Für mich ist es attraktiv, weil es etwas für uns tun kann, weil es eine neue Herausforderung ist und weil es Beschäftigungsmöglichkeiten für die Zukunft bietet.

Sobald wir es beherrschen, wird es ein weiteres Werkzeug sein, das uns als Programmierer noch produktiver macht.

Ein in der Diskussion übersehener Punkt ist, dass die besten Typsysteme in zeitgenössischen FP-Sprachen zu finden sind.Darüber hinaus können Compiler alle (oder zumindest die meisten) Typen automatisch ableiten.

Es ist interessant, dass man beim Programmieren von Java die Hälfte der Zeit damit verbringt, Typnamen zu schreiben, obwohl Java bei weitem nicht typsicher ist.Während Sie niemals Typen in einem Haskell-Programm schreiben dürfen (außer als eine Art vom Compiler überprüfte Dokumentation) und der Code zu 100 % typsicher ist.

Zusätzlich zu den anderen Antworten zwingt die Formulierung der Lösung in rein funktionale Begriffe dazu, das Problem besser zu verstehen.Umgekehrt führt das Denken in einem funktionalen Stil zu besseren* Problemlösungsfähigkeiten.

*Entweder weil das funktionale Paradigma besser ist oder weil es einen zusätzlichen Angriffswinkel bietet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top