Eine Einführung in F (Teil 3)
Kommentare

Let there be F#
Natürlich kann man auch mit F#-Variablen definieren. Dies übernimmt die let-Anweisung:
let text = „World“
printfn „Hello, %s“ text
Auch hier erhalten wir die gleiche Ausgabe. Interessant

Let there be F#

Natürlich kann man auch mit F#-Variablen definieren. Dies übernimmt die let-Anweisung:

let text = "World" printfn "Hello, %s" text

Auch hier erhalten wir die gleiche Ausgabe. Interessant ist, dass F# für die let-Anweisung nicht nur ein Echo der Anweisung ausgibt, sondern weitere Informationen liefert: val text : string = „Hello“. Neben den schon bekannten Informationen, wurde auch der Typ der Variable erkannt. Dies wird als Typherleitung (Type Inference) bezeichnet. Wenn sie mit C# 3.0 programmieren, wird Ihnen das bekannt vorkommen. Übrigens geht die Typherleitung in F# weit über die Fähigkeiten von C# hinaus. In F# spricht man jedoch nicht von Variablen, sondern nur von Werten. Warum das so ist, werden Sie sehen, wenn Sie folgenden Code ausführen: text = „F#“. Überrascht? Das Gleichheitszeichen ist kein Zuweisungsoperator, sondern ein Vergleichsoperator. Daher erscheint in F# Interactive folgende Ausgabe (it bezieht sich auf den Ausdruck selbst): val it : bool = true.

Man versucht vergeblich, text einen anderen Wert zuzuweisen. Eine erneute Anweisung per let erzeugt lediglich eine neue gleichnamige Variable. Das Umdefinieren von gleichnamigen Variablen ist auch nur in F# Interactive, jedoch nicht in einer F#-Anwendung möglich. In F# ist es also nicht möglich, den Wert einer Variable zu ändern. Da ein Wert unveränderlich ist, spricht man auch einfach nur von Werten und nicht von Variablen. Denn Variablen sind variabel – irgendwie logisch, oder? let ist ein so genannter Bindungsoperator, der einen Wert oder Ausdruck an einen Bezeichner bindet. (In F# gibt es trotzdem andere Möglichkeiten, Werte zu verändern, schon allein aus Kompatibilität zu diversen .NET-Methoden)

Der C#-Code in Listing 1 verdeutlicht, was der F# Compiler bei einer let-Anweisung erzeugt. Jetzt ist Ihnen auch klar, warum man einen Wert, der über let erzeugt wurde, nicht ändern kann. Er wurde nämlich in eine statische Property umgewandelt und nicht als Initialisierung einer Variablen.

 namespace MeinErstesFSharpProgramm
{
    class Program
    {

        public static string einString
        {
            get
            {
                return "Hallo";
            }
        }

        static void Main(string[] args)
        {
            string einString = Programm.einString;
        }

    }
}  

Dass let nicht nur einfache Werte, sondern auch komplexe Ausdrücke binden kann, zeigt der folgende Code: let out = printfn. Hier wird einfach die Funktion printfn an einen anderen Bezeichner gebunden. printfn kann nun auch über out aufgerufen werden. In C# ist so ein ähnliches Verhalten nur über Delegates möglich, bei denen aber explizit die Funktionssignatur angegeben werden muss. F# hingegen bindet einfach diese Funktion an einen neuen Bezeichner und leitet daraus den Typ ab. Sie müssen hierzu nichts explizit spezifizieren. Jetzt können wir einfach out mit den entsprechenden Parametern aufrufen: out „Hello, %s“ „World“. Beachten Sie, dass bei der Bindung an out, nicht die Parameter von printfn angegeben werden mussten. Trotzdem konnten wir out mit den richtigen Parametern aufrufen. Sie können ahnen, dass dieses Feature verwendet werden kann, um eine in F# eingebettete domänenspezifische Sprache (DSL) zu kreieren. Dieses und andere F#-Features, wie Funktionskomposition gehen weit über die Fähigkeiten der momentan in C# beliebten Fluent Interfaces hinaus.

Fazit

F# ist aus dem Experimentierstatus herausgewachsen. Jetzt fehlen nur noch die Entwickler, die damit Programme schreiben. Dieser Artikel hat Ihnen gezeigt, wie Sie F# installieren und verwenden können und Sie konnten damit Ihr erstes F#-Programm schreiben. Auch haben Sie eine Vorstellung bekommen, welches Potenzial in F# steckt. In weiteren Artikeln werden wir die Sprachfeatures und Fähigkeiten von F# genauer unter die Lupe nehmen. Seien Sie also gespannt.

Benjamin Gopp ist Entwickler bei der humanIT Software GmbH Bonn, einem Spin-off des Fraunhofer Instituts für Angewandte Informationstechnik (FIT). Er ist dort zuständig für die Weiterentwicklung des Business Intelligence Tools InfoZoom unter .NET. In seinem Blog berichtet er über WPF und seit Kurzem auch über F#.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -