Ich war in letzter Zeit mehr besorgt darüber, wie ich meinen Code schreibe. Nachdem ich ein paar Bücher über Designmuster gelesen habe (und ich bin mir sicher, dass ich sie übereifrig umgesetzt habe), habe ich mein Denken stark darauf konzentriert, das zu verkapseln, was sich ändert. Ich neige dazu zu bemerken, dass ich weniger Schnittstellen und mehr methodenorientierten Code schreibe, wo ich es liebe, alten Klassen mit Prädikaten, Aktionen und anderen delegierten Aufgaben Leben einzuhauchen. Ich neige dazu zu denken, dass sich oft die Aktionen ändern, also fasse ich diese zusammen. Ich zerlege sogar oft, wenn auch nicht immer, Schnittstellen in eine einzige Methode, und dann bevorzuge ich es, einen Delegaten für die Aufgabe zu verwenden, anstatt Client-Code zu zwingen, eine neue Klasse zu erstellen.
Also ich denke es hat mich dann getroffen. Sollte ich stattdessen funktionale Programmierung machen?
Bearbeiten: Ich habe möglicherweise ein Missverständnis über funktionale Programmierung.
Derzeit ist meine bevorzugte Sprache C # und ich komme aus einem C ++ - Hintergrund. Ich arbeite als Spieleentwickler, bin aber derzeit arbeitslos.
Ich habe eine große Leidenschaft für Architektur. Meine Tugenden sind sauberer, flexibler, wiederverwendbarer und wartbarer Code. Ich weiß nicht, ob ich auf diese Weise vergiftet wurde oder ob es zum Besseren ist. Habe ich Refactoring-Fieber oder sollte ich weitermachen? Ich verstehe, dass dies eine Frage zum Thema "Verwenden Sie das richtige Werkzeug für den Job" sein könnte , aber ich würde gerne Ihre Gedanken hören.
Soll ich eine funktionale Sprache lernen? Einer meiner Angstfaktoren ist es, den Komfort von Visual Studio zu verlassen.
Antworten:
JA
Neues lernen sollte Spaß machen. Und wenn Sie eine neue Art des Programmierens lernen, sollten Sie ein besserer Programmierer sein. Überprüfen Sie eine von Haskell oder Erlang, beide sind funktionsfähig, aber sie sind sehr unterschiedlich. Wenn Sie sich für Haskell entscheiden, finden Sie einige Vorträge von "Simon Payton Jones" auf Youtube oder in Podcasts. Der Typ ist ein großartiger Redner.
quelle
Heilig * * * *. Es gibt keine Silberkugel. Schritt zurück. Entspannen Sie sich, atmen Sie tief ein.
Nur weil Sie ein Werkzeug in Ihrer Toolbox haben, heißt das nicht, dass Sie verpflichtet sind, es zu verwenden. Konzentrieren Sie sich auf die anstehende Aufgabe, dh schreiben Sie ein Programm, das funktioniert, und überarbeiten Sie es, wenn Code schlecht riecht. Kapsele und abstrahiere nicht jedes kleine Detail, nur weil es sich eines Tages in der Zukunft ändern könnte. IMO ist es wirklich viel besser, direkt zu beginnen, KISS & YAGNI, und auf sich ändernde Anforderungen zu reagieren, wenn sie sich tatsächlich ändern .
Ich glaube nicht, dass Ihnen hier jemand sagen kann, ob eine funktionale Sprache besser für Ihre Bedürfnisse geeignet ist oder nicht. Weil Sie uns nicht gesagt haben, woran Sie arbeiten.
quelle
Sie können F # abholen . Es handelt sich um eine .NET-Funktionssprache, mit der Sie Visual Studio verwenden und einen Großteil Ihres .NET-Wissens wiederverwenden können. Die Assemblys lassen sich natürlich nahtlos in C # -Baugruppen integrieren (sodass Sie C #, C ++ / CLI und F # einfach in einem Projekt kombinieren können). Die F # -Unterstützung wird mit VS Pro oder besser geliefert. Ich bin mir jedoch nicht sicher, ob es standardmäßig aktiviert ist.
quelle
IMO, es lohnt sich, eine funktionale Sprache auszuprobieren. Selbst wenn Sie es nie direkt in einem veröffentlichten Produkt verwenden, hilft das Erlernen mit ziemlicher Sicherheit dabei, einen etwas anderen Blickwinkel auf die Programmierung zu geben. Selbst wenn Sie am Ende weiterhin alle Ihre "echten" Codierungen in C # ausführen, stehen die Chancen gut, dass Sie den Code, den Sie in C # schreiben, verbessern können.
Wie andere bereits erwähnt haben, ist die offensichtliche Wahl für jemanden, der an Visual Studio gewöhnt ist, F #, das im Grunde ein Ocaml / Caml / ML-Derivat ist. IMO, das war eine gute Wahl von Microsoft, um Menschen in die funktionale Programmierung einzuführen - es ist eine vollwertige funktionale Sprache, hat aber nicht annähernd so fremde Syntax wie manche (z. B. während Lisp-basierte Sprachen) haben echte Vorteile, Anfänger finden es fast immer schwer zu lesen).
quelle
Ja du solltest.
Wenn Sie sich für eine reine Sprache wie Haskell entscheiden, lernen Sie nicht nur eine neue Sprache, sondern auch eine neue Denkweise. Dies kann Ihnen auch später bei Ihrer proceuralen / OO-Arbeit helfen.
F # hingegen ist nicht rein, sodass Sie leicht übersehen können, was für die funktionale Programmierung wichtig ist. Yóu kann sozusagen weiterhin prozedurale Programme schreiben, die hier eine Variable mutieren, und dort einige Nebenwirkungen ausführen, nur in F # -Syntax.
quelle
Wenn Sie bereits c # verwenden, benötigen Sie keine neue Sprache. Mit der Kombination von Erweiterungsmethoden, Lambdas und den generischen Func / Action-Typen ist es ziemlich einfach, Funktionscode in C # zu schreiben. Auf diese Weise können Sie einen Funktionsstil in verwenden die Algorithmen, bei denen es am sinnvollsten ist, ohne die gesamte Anwendung ändern zu müssen.
quelle