Weniger Softwarefehler durch Klarheit – null ist Vergangenheit in F#

Die null ist leider die Quelle vieler Laufzeitfehler.

Die null-en befüllen die Code-Basis und machen sie weniger gut lesbar und wartbar.

Ein typisches Codefragment in C#:

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
// C#
if (x != null) 
{
    return UseALanguageWithoutNull( x );
}
else
{
    return null;
}

Wie es ohne null aussieht

1: 
2: 
// F#
UseALanguageWithoutNull x

Null vs. Option.None?

Wir wissen dass in F# alle Werte initialisiert sind und niemals mit null. Mit der Ausnahme, dass von einer .Net Komponente die nicht in F# geschrieben ist, ein Rückgabewert oder ein Out Parameter als null daherkommt.

Was ist nun, wenn man den Zustand von nicht vorhanden in F# abbilden will?

Dazu dient der Option Type. Dieser kann None oder Some 'T sein. Wobei ‘T ein beliebiger Type sein kann, also z.B. ein int, ein String oder ein Array.

Jetzt könnte man ja sagen es ist genau das selbe?

1: 
2: 
null    vs.     None
obj     vs.     Some 'T

Die Unterschiede sind:

  • Es ist nicht umständlicher einen Wert in einen Option type zu packen. Auch wenn es im ersten Augenblick so aussehen mag. Der Nutzen überwiegt!
  • Der Type ‘T von Some ist bekannt, und auch von None, also welcher Type der keinen Wert hat. Dies ermöglicht die exakte statische Type Überprüfung durch den Compiler, was zu sicherem Code führt. Es wird also nicht zur Laufzeit implizit ge-castet.
  • Elimination der Mehrfachbedeutung von null. Wie oben schon erwähnt: Bedeutet null nun, nicht initialisiert oder nicht zugewiesen oder nicht vorhanden oder kein Ergebnis oder Fehler ? Da jede Variable auch null sein kann, muss der Programmierer immer mitdenken, was für Zustände die Variable haben könnte und was diese im Kontext nun bedeutet. Vergisst er es oder missinterpretiert er es, hilft ihm der Compiler nicht, erst zur Laufzeit unter bestimmten Bedingungen (Zustände, Daten) kann es dann zu null-Exceptions kommen. Im Gegensatz dazu, mit dem Option Type ist es absolut klar und der Compiler weiss es auch und hilft!
union case Option.None: Option<'T>
type obj = System.Object

Full name: Microsoft.FSharp.Core.obj
union case Option.Some: Value: 'T -> Option<'T>

Warum Unternehmen noch zögern mit F#

Ich denke die wesentlichen 3 Gründe (“als grob zitierte Aussagen”) warum sich ein Unternehmen noch nicht getraut F# einzusetzen, nebst all den bekannten Vorteilen, sind:
  • 1. “Eine andere Sprache bringt nichts” “Das Problem das wir haben ist nicht das Programmieren, wozu dann eine andere Programmiersprache?” Das “Funktionale” an einer Funktionalen Programmiersprache ist weit mehr als Lambda-Funktionen und LINQ-Expressions. Es ist nicht nur die Sprache die bei F# anders ist, es ist die Funktionale DENKWEISE! Lernen anders zu Denken, um Probleme einfacher zu lösen, hat noch niemandem geschadet, im Gegenteil! Die Funktionale Denkweise birgt jede Menge neuer Konzepte, Techniken und Tricks, die Objekt-Orientierten-Praktikern meist unbekannt sind. Und die Denkweise wirkt sich auf die Software Entwicklung aus und das auch in anderen Programmiersprachen.
“Without exception, everybody I know who learned F# would say that it made them a better C# programmer. That’s the kind of thing that actually will make a difference during the week.” — Eric Sink (@eric_sink)  [1]   “becoming a better programmer” Warum das so ist? Es ist die Denkweise die sich erweitert hat und die Möglichkeiten diese Umzusetzen.
  • 2. “Es gibt zur Zeit zu wenig F# Entwickler” “Diese einfach vom Markt einzukaufen ist ja z.Z. nicht so einfach möglich.” Dann bildet doch einige aus, am besten ein Team! Ihr werdet sicher Freiwillige finden. Es sind diejenigen Entwickler die schon ein Auge auf Funktionale Programmierung (FP) oder F# geworfen haben und sich privat damit auseinandersetzen. Es sind meist die Talentiertesten der Entwickler die das tun und diese sehen sich auch um am Markt. Lasst sie nicht zu einer anderen Firma abwandern, weil man dort FP oder F# einsetzt und bei euch nicht!
“Startups are beginning to realize the potential for leveraging F# as a way to attract talented developers away from their otherwise satisfactory jobs to try something different just so they can finally turn their F# hobby into a full-time job.” [1]   “F# made me a far better C# developer. I’m delighted I can write F# a lot in my day job now, and I left an otherwise great position to do so.” — Ryan Riley (@panesofglass) [1]
  • 3. “Schulungskosten” “C# 6 hat auch ganz viel Neues, da haben wir erst mal zu tun.” Was auch Schulungsaufwand bedeutet! Und diejenigen die Neues Lernen möchten, sollte man im Unternehmen halten. Ja man muss investieren in die eigenen Entwickler! Und in andere Denkansätze zu Investieren, die Probleme einfacher lösen können, ist ein grundsätzlicher Wettbewerbsvorteil. Und weil noch nicht alle dies erkannt haben, packen Sie die Chance vor den anderen!
 

Wir bieten Hilfe für einen fundierten Einstieg in FP mit F#

Unser F# Kurs vermittelt die Denkweise des Funktionalen Programmierens (FP) von Grund auf, ohne zu sehr akademisch oder mathematisch zu werden. Die F# Programmiersprache wird praxisorientiert gelernt, immer aufbauend auf den Funktionalen Prinzipien, Schritt für Schritt. So lernt man von Kleinen der Funktionen bis ins Grosse der Module wie man per Komposition die Software Lösung entwickelt. Ich habe die Erfahrung in meinen F# Kursen gemacht, dass Senior Software Architekten und CTOs, bei einigen FP-Prinzipien die Köpfe geraucht haben (das ist stark positiv, denn das ist die Reaktion des Gehirns auf die neuen Denkweisen!) und dann gestaunt haben wie elegant man komplexe Dinge lösen kann, und nicht mehr warten konnten es gleich auszuprobieren. Zum Kurs Angebot      [1] “Why are C# programmers afraid of F# or functional languages in general?” 150115 https://dotnetkicks.com/stories/105569

F# Inhouse Schulungskurse

Wir bieten 2-tägige F# Kurse als Inhaus-Kurse bei Ihnen vor Ort an.
  • Kurs
    Funktionale Programmierung mit F# und .NET
  • Kursinhalt
    Mit Fokus auf die praktischen Grundlagen der Funktionalen Programmierung und solidem F# Grundwissen. Anpassen der Trainingsschwerpunkte ist möglich.
  • Inhouse
    Bei Ihnen in einem Sprechzimmer mit Beamer und Flipchart/Whiteboard.
  • Ablauf
    09:00 – 12:00 ; 13:00 – 17:00 an 2 aufeinander folgenden Arbeitstagen.
  • Sprache
    Deutsch
  • Trainingsunterlagen
    In Deutsch als PDF zum selber Ausdrucken für Notizen.
  • Kurs-Zertifikat
    Teilnehmer erhalten ein persönliches Kurs-Zertifikat bei erfolgreicher Absolvierung.
  • Vorkenntnisse
    Ideal .NET Framework und C# oder VB.NET
  • Programmierübungen
    Teilnehmer haben ihre Computer dabei mit Visual-Studio ab 2012 installiert.
  • Teilnehmerzahl
    Mindestens 4, optimal 5-7 Teilnehmer, um bei praktischen Übungen individuell zu unterstützen.
Bitte kontaktieren Sie uns, um Ihren gewünschten Trainingstermin 2016 zu sichern und die aktuellen Preise zu erfahren.

Wir sind in der Schweiz nahe St. Gallen stationiert.
Impressum
Über den F# Fsharp Kursleiter, Referent, Trainer, Instruktor.
Unsere Referenzen
Unsere F# Events