F#, Funktionale Programmierung mit .NET, Teil 1

8. Februar 2008 – 13:14 von Andreas

Ich bin gerade dabei mich in F# einzuarbeiten, um stärker in die funktionale Denke reinzukommen. Das Schöne daran ist, dass ich einige neue Ansätze auch nach C# portieren und dort anwenden kann. Ich finde es sowieso cool, dass funktionale Konzepte immer mehr in den “Mainstream” einfließen. C# 3.0 ist das beste Beispiel hierfür!

Nun aber zu F#:
Ich habe vor meine neuen Erkenntnisse immer wieder zu bloggn und euch somit einen kleinen F#-Crash-Kurs mitzugeben!

Folgendes brauche ich, um mit F# anzufangen:

Nach der Installation des F#-Projekt-Templares findet man in VisualStudio (bei mir ein englisches VS 2008), im [New Project]-Dialog unter [Other Project Types\F# Projects] eine VS-Projektvorlage für ein leeres F# Projekt! Nach dem Anlegen dieses Projekts findet man nur die leere Projektdatei vor. Mit Rechtsklick auf das Projekt, und der Auswahl [Add\New Item…] kann man nun ein neues [F# Source File] anlegen (F#-Dateien haben die Endung *.fs). Diese neu hinzugefügte Datei ist nicht leer. Man findet darin schon einige einführende F#-Beispiele. Um aber bei 0 anzufangen löschen wir den Inhalt der Datei komplett heraus! Nun haben wir also eine leere F#-Datei vor uns.

Als erstes tippen wir “#light” in den Kopf der Datei ein. Dies bewirkt, dass F# den Code whitespace-sensibel einliest. D.h. es muss bei der Entwicklung auf Leerzeichen geachtet werden. Mit dieser Einstellung kann man auf Zeichen, wie die geschweiften Klammern { } oder z.B. begin, end o.ä. verzichten. Gültigkeitsbereiche werden also rein mit Einrückungen gekennzeichnet (es gilt evtl. noch zu erwähnen, dass TABs nicht akzeptiert werden!). Die Konvention sieht für eine Einrückung 4 Leerzeichen vor. Dies macht den Code auch gut lesbar!

Springen wir nun also ins kalte Wasser und beginnen mit einer ersten (wie soll es anders sein;) HelloWorld-Ausgabe:

  1. #light
  2. let helloFSharp = "Hello from F#:)!"
  3. print_string helloFSharp
  4. read_line ()

Zuerst gilt zu sagen, dass in F# Variablen und Funktionen gleich behandelt werden, da Funktionen schlichtweg auch Variablen sind. Mit dem Schlüsselwort “let” definiert man eine neue Funktion oder Variable. In unserem Fall ist dies die Variable helloFSharp, welche den String “Hello from F#:)” zugewiesen bekommt. Den Inhalt dieser Variablen geben wir dann mit Hilfe der Funktion print_string (eine Funktion aus der F#-Library) auf die Konsole aus. “read_line ()” wartet dann noch zum Schluss, bis der Benutzer eine Eingabe in die Tastatur gemacht hat, so dass sich das Programm nach der Ausgabe nicht sofort selbst beendet.

So viel zum ersten kleinen Einstieg! Fortsetzung folgt;)…

  1. 8 Responses to “F#, Funktionale Programmierung mit .NET, Teil 1”

  2. Eigentlich sollte ich ja VS2 lernen, aber das musste ich austesten :)

    Das zip von der Microsoft-Seite hat auch ein Install-Script für Mono dabei, das 1A funktioniert! (muss zuvor mit dos2unix konvertiert werden weil noch ein paar \r’s drin sind)

    % ./bin/fsc.exe test.fs
    % chmod +x test.exe
    % ./test.exe
    Hello from F#:)!

    Vielleicht kannst du bei deinem nächsten Blog-Post eine kleine Aufgabe stellen, so als interaktives Tutorial :)

    By Aaron on Feb 8, 2008

  3. Hey Aaron, Coole Sache, das wusste ich auch nicht:)!
    Das mit dem interaktiven Tutorial find ich ne super Idee!! Das werd ich so machen:)!
    Dem nächst hab ich vor mir auch mal ne Linux-Distr. auf meinen physikalischen Rechner;) (also nicht nur virtuell;) draufzumachen. Dann werd ich da auch mal mit Mono rumtesten:). Wenn ich Fragen hab wende ich mich dann an dich oder nougad;).

    By Andreas on Feb 8, 2008

  4. Hi!
    Nette Idee, das Tutorial mach ich auch mal mit. Aspekte von anderen Sprachen und Konzepten sind immer gut zu gebrauchen. Bei Linuxfragen kannst dich gerne auch zusätzlich an mich wenden, zumindest allgemeine. Mono hab ich noch nicht installiert, werde ich aber nacher mal machen.

    By kb on Feb 8, 2008

  5. Super:)!!

    By Andreas on Feb 8, 2008

  6. wwoooho welch geile Idee. Ein interaktive F#-Tutorial. Ich überleg mir grad ernsthaft Mono zu installieren. Ich bin gespannt auf Teil 2!

    Und dann will er sich noch Linux drauf machen. Mein Tag wir immer besser ;-)

    By nougad on Feb 8, 2008

  7. Ich habe heute mein erstes Projekt mit F# in VS 2010 erstellt und bin dan auf Probleme gestossen es gäbe Print_string und read_line() nicht.
    Nach langem googlen und probieren bin ich nun auf die lösung gekommen.
    Fals du was vergessen hast oben bin ich auch auf diene lösung gespannt?

    #light
    open System

    let hello = “Hello from F#!”
    Console.WriteLine (hello)
    let read = Console.ReadLine()

    By San on Jun 30, 2010

  8. Hallo San,

    danke für deinen Post! Die erstellte Demo ist mit einer etwas älteren Version von F# erstellt worden.

    Hier die Version, welche auf der F#-Version von VS2010 gehen sollte:

    #light
    let helloFSharp = “Hello from F#:)!”
    printfn “%s” helloFSharp
    System.Console.ReadLine() |> ignore

    By Andreas on Jul 4, 2010

  9. @San: Deine Lösung ist natürlich genauso gut :-)! Noch als Anmerkung:
    let read = Console.ReadLine()
    kannst du verwenden wenn du die Bindung read noch später brauchst. Falls das nicht der Fall ist kannst du ignore verwenden, damit sparst du dir das Binding.

    Viele Grüße
    Andreas

    By Andreas on Jul 4, 2010

Post a Comment