Wie beeinflusst funktionale Programmierung Ihren Programmierstil? [geschlossen]

7

Die meisten Programmierer verwenden heutzutage OOPS-Konzepte für die Softwareentwicklung.

Aber einige von ihnen sind auch der funktionalen Programmierung ausgesetzt.

Wie beeinflusst funktionale Programmierung Ihren Programmierstil?

    
Dhana 09.07.2009, 13:09
quelle

10 Antworten

6

Der Haupteinsatz bestand darin, Funktionen in Funktionen höherer Ordnung wie Filter und Map (Where und Select in .Net) zu übergeben. Dies ist wirklich der größte Effekt, der Dinge wie Set-Operationen nur einmal und dann Dinge, die eingreifen, beschreibt oder modifiziere Sätze.

So Dinge wie

%Vor%

statt

%Vor%     
Steve Cooper 09.07.2009, 13:38
quelle
5

Ich finde es viel einfacher, Multi-Thread-Code jetzt zu schreiben.

Ich habe tendenziell weniger Variable auf Klassenebene als zuvor.

Ich habe auch Schnittstellen, die funktional unabhängig sind ... wieder hat das einen großen Gewinn, wenn es um Multithreading geht, da es die Menge der erforderlichen Objektverriegelung stark reduzieren kann, vorausgesetzt, dass Ihre Threads auch funktional unabhängig sind.

>

Ich neige auch dazu, Albträume über schließende Klammern zu haben, die mich verfolgen.

    
John Nicholas 09.07.2009 13:25
quelle
4

Zwei Dinge kommen mir in den Sinn, die aus funktionaler Programmierung stammen, die ich anwende:

  • Ändern von void-Methoden, die Klassenvariablen in Methoden ändern, die Werte zurückgeben
  • Machen Sie Klassen unveränderlich statt Klassen mit Setter (JavaBeans antipattern)
Fabian Steeg 09.07.2009 13:26
quelle
3

Nachdem ich einen guten Teil von Haskell geschrieben habe, ist es für mich viel einfacher, Linq zu SQL in meinem C # -Code zu verwenden.

Ich lehne mich nun stark darauf ab, Code zu schreiben, der ein Ergebnis annimmt und ein Ergebnis zurückgibt, anstatt eine Variable als Nebeneffekt zu ändern.

Ich habe große Teile des prozeduralen und funktionalen Codes geschrieben, was es für mich einfacher macht, meinen Code in kleinere Stücke einzuteilen, die eher der eine oder der andere Stil sind. Als ich nur prozedurale / oop Programmierung kannte, hatte ich weniger Werkzeuge in meiner mentalen Toolbox.

Das Lesen von Bibliotheksquellen in Haskell hat mir gezeigt, wie ich meinen Code besser aufkochen kann, um Abstraktionen von der eigentlichen Aufgabe zu trennen.

Ich habe viel vom Schreiben von Haskell gewonnen!

    
shapr 09.07.2009 13:31
quelle
2

In gewisser Weise fiel mir auf, wie sehr ich unbewusst die Programmierung von funktionalem Stil benutzt hatte, ohne es für das zu erkennen, was es war.

Zum Beispiel verwende ich in Java häufig Konstrukte in Commons-Sammlungen wie Transformer und Predicate, die im Wesentlichen als Closures, aber als Java-Interfaces implementiert sind. Sie verwenden dann die bereitgestellten Dienstprogrammfunktionen zum Transformieren und Filtern von Elementen in einer Sammlung. Dies widerspricht der "standardmäßigen" imperativen Vorgehensweise in Java.

Dies sind natürlich Funktionen und Filterfunktionen von Vanille, aber ich hatte sie instinktiv benutzt, ohne zu wissen, was es war. Das deutet darauf hin, dass der funktionale Stil in hohem Maße intuitiv ist, auch wenn man nicht darüber informiert wird.

    
skaffman 09.07.2009 13:46
quelle
1

Event-Handler, die Closures sind;

%Vor%     
Steve Cooper 09.07.2009 13:33
quelle
1

Ich finde, dass die Verschiebung von Python 3.x zu Iteratoren für mich sehr natürlich ist, weil es mich an Haskells faule Auswertung erinnert.

Ganz gleich, ob Sie Python 2.x oder Python 3.x verwenden, listen Sie die Comprehensions auf , < a href="http://docs.python.org/3.0/library/functions.html#map"> map , itertools , operator und (zu einem etwas weniger umfangreich) functools , sind meine Freunde!

    
Stephan202 09.07.2009 13:41
quelle
1

Da die funktionale Programmierung orthogonal zur OOP ist, hat sie mir wirklich die Augen geöffnet, wie ich meine Klassen strukturiere.

  • Ich habe tendenziell sinnvollere Interfaces, die Konzepten ähneln.
  • Mein Code ist besser entkoppelt und ich habe mehr kleinere sinnvolle Klassen. Es ist selten, dass ich eine Klasse erzeuge, nur um ein Muster zu implementieren.
  • Ich erstelle weniger Setter, stattdessen rufe ich verschiedene Memberfunktionen auf, die den gewünschten Wert berechnen und an einen einzelnen Setter übergeben.
  • Vor der funktionalen Programmierung würde ich niemals daran denken, eine Funktion als Parameter als Lösung zu übergeben, während ich versuche, ein Problem zu lösen. Jetzt kommt mir diese Lösung einfach in den Sinn und hilft wirklich mit DRY.
  • Mein Code enthält mehr Ausdrücke anstelle von Anweisungen.
  • Wenn eine Lösung es erlaubt, lehne ich mich einer faulen Bewertung zu.
gradbot 09.07.2009 15:05
quelle
0

Funktionale Programmierung und OO sind keine disjunkten Konzepte. Ein Mangel in den funktionalen Sprachen, den ich sehe, ist ihr Mangel an ADT Ausdruckskraft. Das Nächste, was ich der funktionalen Programmierung in einer OO-Sprache gesehen habe, ist Eiffel. Durch Konvention Funktionen sind referentiell transparent, es wäre ideal, wenn dies erzwungen würde.

    
clemahieu 09.07.2009 15:17
quelle
0

Ich habe ein bisschen darüber in

geschrieben

Wie wirkt sich funktionale Programmierung auf die Struktur Ihres Codes aus?

Einige sind F # -spezifisch, aber es gibt viele allgemeine Beobachtungen dort.

    
Brian 10.07.2009 22:01
quelle

Tags und Links