Kann ich mir gute funktionale Programmierpraktiken beibringen?

8

Ich plane, mich in das Paradigma der funktionalen Programmierung einzumischen und den Gedankenprozess für mich zur zweiten Natur zu machen. Das .Net / Mono ist das einzige Framework / Objektmodell, mit dem ich vertraut bin und ich möchte kein anderes Typsystem lernen. Das macht F # zu einer offensichtlichen Überlegung, da die Belastung durch das Lernen eines neuen Typensystems kein ablenkender Faktor sein wird.

Aber meine Sorge betrifft die Sprache selbst. Wird es so gut sein wie jede andere klassische funktionale Programmiersprache (z. B. Haskell) beim Bohren von FP in meinen Schädel?

    
explorer 22.11.2010, 02:25
quelle

5 Antworten

10

Ja, kann es. Besonders hilfreich und wichtig hier ist Real World Functional Programming , das bei FP sowohl aus der C # - als auch aus der F # Perspektive kommt. Du wirst es lieben.

    
jason 22.11.2010, 02:32
quelle
9

Ich denke, der Vorteil des Erlernens von funktionaler Programmierung mit F # (insbesondere wenn Sie bereits Erfahrung mit C # und .NET haben) ist, dass Sie es viel einfacher finden, ein lustiges Projekt zu erstellen.

  • Ein Grund ist, dass Sie bereits mit .NET-Bibliotheken vertraut sind (die von F # aus leicht zugänglich sind)
  • Der zweite Grund ist, dass F # nicht rein ist, also können Sie anfangen, Code zu schreiben, der funktioniert, und ihn dann verbessern, um ihn funktionsfähiger zu machen.

F # unterstützt mehrere Paradigmen, aber es ist hauptsächlich eine funktionale Sprache (im Vergleich zu Python oder C #, die auch mehrere Paradigmen unterstützen, aber nicht primär funktional sind). Dies macht es einfacher, sich zu zwingen, den funktionalen Stil zu verwenden. Es ist einfacher, imperative Muster zu vermeiden, weil sie schwieriger in F # zu schreiben sind (und der Code sieht schlechter aus).

Ich denke, sobald Sie die Grundlagen der funktionalen Programmierung "bekommen", wird es leichter sein, andere funktionale Sprachen zu lernen, wenn Sie immer noch interessiert sind. Es ist definitiv schön, etwas über Haskell oder Scheme zu wissen, weil sie (in mancher Hinsicht) radikaler sind.

Wenn Sie Konzepte gut verstehen können, ohne sie wirklich in einigen realen Projekten zu verwenden, dann kann es auch eine gute Option sein, mit einer klassischen Sprache zu beginnen, indem Sie ein klassisches Buch verwenden (zB Haskell School of Expression oder Struktur und Interpretation von Computerprogrammen ). Ich meine das nicht in einem negativen Sinn - ich persönlich mag es, technische Bücher zu lesen, ohne Beispiele auszuprobieren, weil ich die interessanten Konzepte immer noch aus dem Lesen nehmen kann (und in der Praxis gibt es immer Google). Natürlich können Sie Code in Haskell oder Scheme schreiben, aber als .NET-Programmierer werden Sie wahrscheinlich mehr Spaß am Schreiben von F # -Code finden ...

    
Tomas Petricek 22.11.2010 04:17
quelle
4

Ja, es wird Ihnen auf jeden Fall helfen, funktionale Programmierung zu lernen. F # unterstützt auch objektorientiertes Programmieren, daher sollte der Wechsel einfacher sein. Wenn Sie zu einer voll funktionsfähigen Sprache wechseln möchten, könnten Sie das tun, aber ich finde die Kombination von OO und FP besser als OO oder FP (ich bin ein Scala-Programmierer, der wie F # ist).

    
Peter C 22.11.2010 02:31
quelle
3

F # kann in vielerlei Hinsicht besser sein als die meisten "anderen klassischen funktionalen Programmiersprachen". Da Sie .NET bereits kennen, können Sie Ihr gesamtes .NET-Wissen voll ausschöpfen und gleichzeitig zwei nützliche Dinge aus F # herausholen:

  1. Das funktionale Programmierparadigma. Das heißt, wie man im Stil von FP programmiert. Sie können das in jeder Sprache verwenden. Ich lerne oft zu FP in meinem C # -Code, weil ich finde, dass es eine viel wartungsfreundlichere und wiederverwendbare Art ist, Software zu schreiben.

  2. Die funktionale Programmiersprache einer Sprache. F # ist OCAML sehr ähnlich, und die ML-Familie bildet einen der drei Hauptdialekte der FP-Sprachen. Die anderen beiden Großen sind die Miranda-Familie (von denen Haskell der größte moderne Vertreter ist) und die LISP-Familie (wo Common Lisp und Scheme die beiden großen Wiederholungen sind).

In F # kann es Ihnen helfen, die Unterscheidung zwischen F # -Typen und .NET-Typen sehr deutlich zu machen. Records, Tuples und Discriminated Unions sind (ziemlich) reine F # -Dinge, und sie werden in fast allen funktionalen Sprachen verwendet. Verwenden Sie diese sehr, wenn Sie FP lernen wollen. Klassen, Strukturen und Schnittstellen sind ebenfalls vorhanden, aber das sind .NET-Konzepte. Verwenden Sie sie nach Bedarf, aber versuchen Sie, sie im Allgemeinen zu vermeiden, damit Sie nicht "idiomatisches F #", sondern "C # mit einer doof Syntax" schreiben.

Die Dinge, die Sie von Haskell wirklich vermissen werden, sind wahre Reinheit (eh, nicht so groß von einem Deal), faule Bewertung standardmäßig (eine große Veränderung) und Klassen eingeben. Sie können in F # Lazy Eval machen, aber Sie müssen das explizite Lazy & lt; & gt; Klassen um es zu bekommen. Lazy Eval überall zu haben ist eines der wirklich einzigartigen und kraftvollen Dinge in Haskell, aber es ist kein striktes FP-Konzept. Typenklassen sind sehr mächtig, aber Sie können ohne sie für die meisten realen Situationen auskommen. Sie sind nur eine höhere Ebene der Abstraktion, die einige Kesselplatte und Wiederholung verringert.

Wahre Reinheit ist normalerweise akademischer. Es hat gewisse Vorteile, aber wenn Sie bereits an .NET und unreine Techniken gewöhnt sind, werden Sie es meistens nur mühsam finden, bis Sie sich die FP Denkweise angeeignet haben.

    
CodexArcanum 22.11.2010 22:59
quelle
2

Funktionelles Programmierparadigma? Haskell kommt mir sofort in den Sinn. Übrigens gibt es in Haskell kein erben Framework . Soweit ich weiß, ist Ihr Framework ein Terminalfenster und ein Programmiereditor.

Wenn Sie eine funktionale Programmiersprache in Ihrem .NET Framework wollen, müssen Sie bei F # bleiben.

IronPython, aber der Weg, ist keine funktionale Programmiersprache.

    
David W. 22.11.2010 03:12
quelle