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.
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.
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.
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:
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.
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 ...).
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.
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.
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".
Tags und Links c# f# static-methods