Kann ich die gleichen Vorteile der funktionalen Programmierung (F #) erhalten, wenn ich mehr statische Methoden in C # verwende?

7

Ich gebe zu, ich habe F # noch nicht gegrunzt. Aber in den 30.000-Fuß-Beschreibungen reden sie weiter über einfach zu testenden Code, der keinen veränderlichen Zustand hat. Ist das das gleiche wie statische Methoden?

Könnte ich den Vorteil von F # bekommen, indem ich etwas Code in Klassen mit allen statischen Methoden schreibe?

Ich bin nur auf der Suche nach der kurzen Antwort, ich weiß, dass ganze Bücher über das Thema existieren.

    
MatthewMartin 28.04.2009, 12:35
quelle

7 Antworten

8

Sie könnten natürlich C # -Code unveränderlich schreiben, aber das hat nichts mit statischen Funktionen zu tun. Unveränderlichkeit sind Dinge wie eine Struktur oder ein Objekt, die nur "den Zustand ändert", indem sie eine Kopie von sich selbst machen und die Kopie anders aussehen lassen.

    
Adam Luter 28.04.2009, 12:40
quelle
8

Absolut nicht, Unveränderlichkeit hat nichts mit Methoden zu tun, die statisch oder instanziiert sind. String , eine unveränderliche Klasse, verfügt über viele Instanzmethoden, die auf sehr funktionale Weise eine neue Instanz von String klasse zurückgeben, anstatt irgendetwas zu ändern.

Sie könnten versuchen, F # zu emulieren, indem Sie die funktionale Dekomposition verwenden, aber das ist immer noch ein ziemlich imperativer Code.

    
Anton Gogolev 28.04.2009 12:38
quelle
5

Abgesehen von statischen, funktionalen Modulen und Objekten können Sie versuchen, einige der Vorteile von F # zu nutzen, indem Sie C # 3 und lambdas, LINQ usw. verwenden. Das geht jedoch nicht sehr weit. Was ich in F # schön finde ist:

  • Schlussfolgerung überall
  • Automatische Generalisierung (fügt Typparameter hinzu, damit ich sie nicht manuell sortieren muss)
  • Einfache Unveränderbarkeit
  • Einfache Mischung zwischen Modul und Klassen
  • Typen wie diskriminierte Gewerkschaften
  • Mustererkennung
  • Verschachtelte Funktionen (leichtgewichtig)
  • Erstklassige Funktionen (nein, C # 's benannte Delegierte zählen nicht)
  • Alles ist ein Ausdruck
  • Einfache Funktionszusammensetzung

Sie können also versuchen, etwas in C # zu tun. Einige davon werden einfach nicht unterstützt und funktionieren nicht. Der Rest wird sehr hässlich, sehr schnell.

Wenn Sie also viel abseits der ausgetretenen Pfade von LINQ und den Enumerable-Erweiterungen gehen, werden Sie wahrscheinlich in einer Welt voller Schmerzen landen.

    
MichaelGG 29.04.2009 04:02
quelle
4

Ich bitte, mich mit allen anderen Antworten zu unterscheiden. Unveränderbarkeit und statische Methoden mögen nicht streng technisch verwandt sein, aber ich habe festgestellt, dass die Verwendung von F # mich dazu ermutigt hat, C # -Methoden statisch zu machen, wann immer ich kann.

Das Denken ist analog, da es einfacher ist, mit einem unveränderlichen Objekt umzugehen, weil Sie sich nicht darum sorgen müssen, dass es den Zustand ändert. Auf dieselbe Weise müssen Sie sich bei Verwendung einer statischen Methode keine Gedanken über den Zustand machen (es sei denn, Sie verwenden einen globalen Singleton oder etwas ...).

    
Benjol 29.04.2009 07:26
quelle
3

Nein, das ist nicht dasselbe wie statische Methoden. Sie haben keinen änderbaren Status, wenn Sie nach der Initialisierung nichts zuweisen (Locals, Funktionsargumente, statische Felder, Instanzfelder). Sie können einige der Vorteile nutzen, indem Sie Ihre Klassen als unveränderlich gestalten.

    
Anton Tykhyy 28.04.2009 12:37
quelle
2

Nein, die beiden Konzepte sind nicht verwandt. Statische Methoden in C # können eingehende Objekte weiterhin als normal und andere Variablen mit ref oder out ändern.

    
Jeromy Irvine 28.04.2009 12:38
quelle
1

IT ist wahr. Sie erhalten die Vorteile der funktionalen Programmierung nicht, indem Sie nur statische Funktionen in C # verwenden. Wie auch immer, wenn Sie unter die Haube schauen (zum Beispiel mit Reflector), verstehe ich, dass eine einfache Let-Anweisung eine statische Funktion ist. Mit anderen Worten,

%Vor%

ist wie eine Funktion in C #

%Vor%

Ich kann die Verwirrung verstehen.

Erklärung aus Leon Bambricks "F # Eye für die C # Guy Präsentation".

    
Ben Griswold 07.07.2009 17:58
quelle

Tags und Links