
Drei neue Kapitel zu F#
Weitere drei Kapitel sind erstellt:
Funktionen in F#
Weniger Softwarefehler durch Klarheit – null ist Vergangenheit in F#
Zuverlässige Software durch weniger bewegliche Teile
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 |
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:
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.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!“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.
“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]