Ändern Sie meine Denkweise in Vorbereitung auf die funktionale Programmierung

9

Welche Dinge muss ich im Voraus über "diese neue Denkweise" wissen, wenn ich von prozeduralem und OOP zu einem funktionalen Programmierstil wechsle?

Wie bereitest du dich auf das Tauchen in der FP-Welt vor und bekommst es zum ersten Mal?

Was sind die Grundlagen, um zuerst zu lernen und klar zu stellen?

JohnDoDo
quelle
2
Das ist zu allgemein, imho. Fangen Sie einfach an zu lesen! Die meisten Bücher und Handbücher zur funktionalen Programmierung beginnen heutzutage mit den Antworten auf Ihre Frage.
devmiles.com
Versuchen Sie es und posten Sie eine Frage, wenn Sie auf etwas stecken bleiben
Tom Squires
@Vladimir Volodin: Das wäre schön, aber es ist nicht für jedes Buch obligatorisch. Können Sie einige gute empfehlen (vorzugsweise sprachunabhängig)?
JohnDoDo
Du musst nicht tauchen . Sie können versuchen, einen Lambda-Ausdruck in einer OOP-Sprache wie c # zu verwenden, um den Übergang von OOP zu FP zu glätten.
TomCaps
4
Ich denke du hast es rückwärts. Versuchen Sie es mit funktionaler Programmierung, und Ihre Denkweise wird sich ändern.
Kevin Cline

Antworten:

6

Sie brauchen deklaratives Denken anstelle der prozeduralen Methode "Lösen Sie dies zuerst, dann tun Sie dies, dann tun Sie dies ...", um Probleme zu lösen. Das Verständnis der Rekursion könnte ein guter Ausgangspunkt sein, da es eine Art Sweet Spot zwischen prozeduralem und deklarativem Denken ist.

Joonas Pulakka
quelle
4

Sie haben den Wagen vor das Pferd gestellt. Sie müssen sich nicht vorbereiten. Wählen Sie einfach eine Sprache aus, die interessant aussieht, finden Sie eine Dokumentation und probieren Sie sie aus. Wenn Sie nicht weiterkommen, halten Sie an und suchen Sie nach einer Antwort. Während Sie fortschreiten, wird sich Ihre Denkweise ändern.

Kevin Cline
quelle
3

FP basiert auf Lamdba-Kalkül. Das musst du wissen. Es ist ein guter Ausgangspunkt. Funktionen sind alles. Es gibt kein Staatskonzept (obwohl man es auf einer höheren Ebene vortäuschen kann).

In OOP,

a = 1 a = a + 1

ist akzeptiert. Nicht so bei FP. Sie können der Variablen einfach keinen anderen Wert zuweisen. Wenn Sie FP langfristig lernen möchten, lernen Sie Haskell. Es ist die reinste Version von FP da draußen und es ist auch ziemlich kompliziert (ich habe gerade angefangen, es zu lernen), aber es lohnt sich immer noch, es zu lernen.

Eine Einführung in die funktionale Programmierung gibt Ihnen einen allgemeinen Überblick darüber, worum es bei FP geht.

Zwei Vorbehalte

  1. Wenn Sie FP für Jobs lernen möchten, gibt es nicht zu viele offene Stellen. Verfahren und OOP regieren weiterhin den Arbeitsmarkt. FP kann Ihnen jedoch sehr dabei helfen, neue Wege zur Lösung eines Problems zu finden.
  2. FP-Compiler sind nicht besonders schnell. Da FP sich mehr mit der Lösung des Problems befasst, können Sie keine C-Geschwindigkeit erwarten. Sie können dem Compiler (in Haskell) dennoch Anweisungen erteilen, um den Ausführungsprozess zu beschleunigen. Der Nachteil ist, dass Sie viel Zeit haben, sich auf das jeweilige Programm zu konzentrieren, anstatt auf Fehler bei der Brandbekämpfung.
Ubermensch
quelle
8
"FP basiert auf Lamdba-Kalkül. Das müssen Sie wissen." Nein, tust du nicht. Die Kenntnis der Lambda-Rechnung ist nicht erforderlich, um die funktionale Programmierung besser zu verstehen, als die Kenntnis der Turing-Maschinen (oder der Montage), um die zwingende Programmierung zu verstehen.
sepp2k
@ sepp2k Um bei FP mit einem langfristigen Ziel gut zu werden, glaube ich ehrlich, dass es notwendig ist, Lambda-Kalkül zu lernen. Sie können es ohne Lambda-Kalkül lernen, aber wenn Sie es lernen, werden Sie bei FP besser.
Ubermensch
2
FP hat sicher den Status, dass dieser Status normalerweise unveränderlich ist, auch nicht sicher, ob ich der Aussage über langsame Compiler zustimme
jk.
@jk. Sicherlich haben sie einen Zustand, aber nicht auf OO-Weise (Zustände können in Funktionen oder als Übereinstimmungsmuster und auf subtilere Weise enthalten sein). Und ein unveränderlicher Zustand bedeutet, dass Sie nur einen einzigen Zustand haben. Deshalb sollte eine Funktion immer den gleichen Wert zurückgeben. In Bezug auf Compiler glaube ich nicht, dass sie in Bezug auf die reine Geschwindigkeit mit C / C ++ übereinstimmen können, da der Compiler sich um die Schritte kümmert, die zur Berechnung des Ergebnisses erforderlich sind, anstatt dass wir die Reihenfolge angeben. FP hat seinen größten Vorteil in reduzierten Entwicklerkosten und parallelem Computing anstelle der reinen CPU-Geschwindigkeit.
Ubermensch
3

Ich versuche mein Bestes, um mich an das folgende Mantra zu erinnern:

Dateneingang -> Daten transformieren -> Datenausgang

oder

TransformData (Dateneingang) -> Datenausgang

Dunkle Nacht
quelle
1
Es sollte TransformData (DataIn) -> DataOut
Ubermensch
:) als Matra "Dateneingang, Daten transformieren, Datenausgang" ist einfacher zu sagen "Daten transformieren, Klammer öffnen, Dateneingang, Klammer schließen, Datenausgang" Ich mache nur Spaß, ich stimme Ihnen zu.
Darknight
Es ist nur ein freundlicher Kommentar Kumpel. Danke für die Antwort.
Ubermensch
Ich weiß, ich habe nur mit dir gescherzt, keine Beleidigung, tatsächlich denke ich, dass ich meine Matra aktualisieren werde.
Darknight
Mann, deine Fähigkeiten sind ziemlich groß.
Ubermensch