(demnächst nicht mehr sharp genug?)
Für eingefleischte VB-Entwickler mag sich der Titel meines Blogeintrags nach einem ähnlichen "Horror" (bezogen auf die filmische Qualität) wie der Kinostreifen "Alien vs Predator" anhören (egal wer gewinnt, wir verlieren), speziell für C#-Entwickler hat ein solcher Vergleich durchaus seinen Reiz, gilt für manche das kommende F# bereits als das künftige C# (wenngleich das mit Sicherheit nicht passieren wird). Ich halte F# für viel zu kompliziert und anspruchsvoll für den Alltagsgebrauch, so dass es maximal für eine kleine Minderheit (Elite) an C#-Entwicklern eine echte Alternative sein dürfte. Das folgende kleine Beispiel habe ich aus einer ganz gut gemachten, wenngleich recht spärlichen Einführung in F# unter http://fsharp.net (es ist erstaunlich schwierig funktionierende und vor allem aussagekräftige Beispiele zu finden) gezogen - es berechnet die Quadratzahlen der Zahlen von 1 bis 10:
let Quadrat x = x * x
let Zahlen = [1 .. 10]
let Quadratwurzeln = List.map Quadrat Zahlen
printfn "n^2 = %A"Quadratwurzeln
Ein Schleifenbefehl wird nicht benötigt, List.map wendet stattdessen die Funktion Quadrat auf alle Elemente der Liste Zahlen an (eigentlich gar nicht sooo kompliziert).
Dass auch C# 3.0 (und VB.NET 9.0) so etwas können, macht das folgende Beispiel deutlich:
Func<int, int> Quadrat = x => x * x;
var Zahlen = Enumerable.Range(1, 10);
var QuadratWurzeln = Zahlen.Select(Quadrat);
Console.WriteLine("n^2 = {0}", QuadratWurzeln.Aggregate("", (s, i) => s + " " + i));
Das ist nicht F#, sondern ganz normales C# 3.0 (in VB.NET würde es ähnlich aussehen). Fans funktionaler Ansätze bei der Programmierung müssen also nicht unbedingt auf F# warten. F# spielt seine wahren Vorzüge erst im Zusammenhang mit paralleler Programmierung und asynchroner Vorgänge aus. Themen, die Zukunft sicher deutlich wichtiger werden dürften. Einen ganz guten Überblick über F# gibt ein Wikipedia-Eintrag (Wikipedia hat anscheinend Probleme mit dem #) und ein recht umfangreiches Wiki.
PS: In dem obigen Beispiel produziert Enumerable.Range(1,10) eine Collection mit den Zahlen von 1 bis 10. Eine Alternative wäre natürlich ein Array:
int[] Zahlen = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
PSPS: Eine der Köpfe hinter F# bei Microsoft, Don Syme, war übrigens vor ein paar Wochen in München auf dem F# night talk. Für Entwickler, die bereits mit F# arbeiten, war es mit Sicherheit hochinteressant, für meinen Geschmack war es ein "wenig" zu anspruchsvoll (und akademisch trocken).
(hier geht's lang zur möglichen Zukunft der Programmiersprachen)