Warum funktionale Programmierung?


38

Wie ist der Umgang mit funktionaler Programmierung? Ich sehe viel darüber zu reden, aber um ehrlich zu sein, fand ich sie überhaupt nicht nützlich. Warum unterrichten sie anscheinend so viele Universitäten?


6
Sehr groß in der AI-Programmierung.
Aqua

3
@aqua - sollte das nicht eine Antwort sein, warum nicht?
Martin Beckett

5
Ich möchte auch darauf hinweisen, dass selbst traditionelle OO-Sprachen anfangen, Konzepte aus der funktionalen Programmierung einzubeziehen. Linq (in .NET) ist ein typisches Beispiel.
apoorv020

Ich denke, funktionale Programmierung trainiert Ihr Gehirn mehr und kann zu wirklich prägnantem Code führen. Es ist also ziemlich cool.
Adel

2
@ apoorv020: Und Generika, Tupel und Garbage Collection und ... alle haben ihren Ursprung in funktionalen Sprachen.
Jon Harrop

Antworten:


60

Beginnen Sie mit Why Functional Programming Matters . Gehen Sie dann zu Warum Warum Funktionsprogrammierung wichtig ist . Ein paar Kugeln:

  • Durch die funktionale Programmierung können Sie Probleme unterschiedlich beurteilen
  • Funktionale Abstraktion ist sehr leistungsfähig und ermöglicht es Ihnen, Ihren Code auf eine Weise zu trocknen , die für andere Paradigmen nicht verfügbar ist
  • In unserer Zukunft mit mehreren Kernen ist es möglicherweise einfacher, funktionale Sprachen in gleichzeitige Aufgaben zu unterteilen (obwohl nicht streng funktionale Sprachen ebenfalls hart an dem Problem arbeiten).
  • Es ist einfacher zu beweisen, dass Programme, die in reinen funktionalen Sprachen geschrieben sind (keine Nebenwirkungen), mathematisch korrekt sind.

5
+1 - Dies sind alles hervorragende Punkte, und sie werden sowohl präziser als auch genauer erklärt, als ich es versucht habe.
jmort253

1
Mit Ihrem vierten Punkt, meinten Sie die Sprache korrekt nachgewiesen werden kann, oder Programme geschrieben in der Sprache? Wie auch immer, sowohl unreine Sprachen als auch Programme, die in unreinen Sprachen geschrieben sind, können als richtig erwiesen werden, es ist nur viel schwieriger und chaotischer.
Jörg W Mittag

1
@ Jörg W Mittag, es ist auch viel einfacher, über die Eigenschaften der Sprache selbst nachzudenken. Die Denotationssemantik ist für die funktionalen Sprachen trivial und für den Imperativ ziemlich kompliziert.
SK-logic

lustig, wie der zweite link einige "explizite" argumente liefert, wissend, dass ich nicht einmal den 1. link lese.
jokoon

+1: Tolle Antwort. Mir gefällt besonders, wie Sie die Punkte 1 und 2 in Worte fassen.
Jim G.

9

Funktionale Programmierkonzepte bilden eine Grundlage, die Ihre Denkweise ändert und Sie bei der Lösung realer Probleme unterstützt.

Das Konzept ähnelt dem, warum wir alle Multi-Variable Calculus, Algebra und / oder Ingenieurphysik als Hauptfächer der Informatik erlernen, obwohl wir dieses spezifische Wissen in unserer Karriere möglicherweise nie benötigen.

Dies ist der Grund, warum Juristische Fakultäten Kandidaten mit einem BS in Mathematik lieben. Das Studium der Mathematik bringt Ihnen bei, über mehrere Konzepte auf logische Weise nachzudenken, und die funktionale Programmierung bringt Ihnen Abstraktionen und viele andere wichtige Konzepte bei, mit deren Hilfe Sie Probleme aufschlüsseln und aus einem anderen Blickwinkel betrachten können.

Zusammenfassend lässt sich sagen, dass die funktionale Programmierung Ihnen das Lernen beibringt.


Vielleicht braucht es dann wirklich keinen Namen? Ist es nicht einfach "korrektes" Programmdesign?

4

Wenn Sie anfangen, ist die funktionale Programmierung das beste Denkmodell. Weil die meisten Ihrer Programme keine Objektorientierung erfordern. Zumindest war das meine Erfahrung.

Nun, da ich mich mit einigen Apps befasse, die eine Trennung von Anzeige und Logik erfordern, habe ich begonnen, die gesamte Logik und den Anzeigecode zu trennen, um es jedem zu erleichtern, das zu tun, was es am besten kann.

Aber Sie werden nicht wissen, warum Sie das tun sollen, es sei denn, Sie beherrschen zuerst Functional. Ich mochte es nie, wenn Leute OO auf mich drückten, oder dass OO die Lösung für alles ist. Stellen Sie einfach sicher, dass die Vorgehensweise, an der Sie arbeiten, Sinn macht und dass die Lernkurve nicht zu steil ist, um sich zu viel Zeit für die Arbeit zu nehmen, für die Sie bezahlt werden.


1
+1 - Ich finde es gut, dass Sie darauf hinweisen, dass Sie die beste Technik für den Job verwenden: Stellen Sie sicher, dass es sinnvoll ist.
jmort253

1
Leider ist gesunder Menschenverstand in unserer Branche selten. Weil jeder von uns völlig unterschiedliche Erfahrungen hat, die aufgrund der Fehler, die wir machen, unterschiedlich sind, die unterschiedlichen Gewohnheiten jedes von uns entwickeln und warum wir sie machen ... Eine Anpassung der Quellcodeverwaltung macht für jeden, der immer mitgearbeitet hat, keinen Sinn selbst.
Crosenblum

"Der gesunde Menschenverstand ist die gerechteste Sache der Welt, denn jeder glaubt, er sei so gut damit ausgestattet, dass selbst diejenigen, die in allen anderen Angelegenheiten am schwersten zu befriedigen sind, nicht die Angewohnheit haben, mehr davon zu wünschen, als sie es bereits getan haben haben." - Descartes

3

Weil es Verben betont, keine Substantive. Manchmal sind es die Verben, die eine Rolle spielen.


OOP betont Substantive. Manchmal sind es die Hauptwörter, die eine Rolle spielen. Woher wissen wir was? - Falsches Dilemma. System angehalten

3

Im Allgemeinen wird weniger Code verwendet, um dieselbe Aufgabe auszuführen. Weniger Code zum Schreiben ist weniger Code zum Verwalten. Abgesehen davon, dass es weniger Code ist, hat es tendenziell auch weniger Status und ist daher etwas einfacher zu überlegen (wenn Sie sich erst einmal daran gewöhnt haben).


Ist das nicht einfach die Definition von "besser"? Warum sollten wir etwas anderes als das tun wollen, was Sie beschrieben haben?

2

Vielleicht, weil Universitäten etwas aus allen Programmierparadigmen lehren wollen und für bestimmte Dinge die funktionale Programmierung besser ist (wie das Beschreiben der Bewegung von Spielcharakteren und das Beschreiben von Animationen).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.