BASLE BERN BRUGG DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENEVA
HAMBURG COPENHAGEN LAUSANNE MUNICH STUTTGART VIENNA ZURICH
Von C# nach F# in 60 Minuten
.NET Developer Conference 2017
Manuel Meyer
www.manuelmeyer.net
@manumeyer1
Slide 2
Slide 2 text
Über mich…
Consultant & Trainer for .NET
C#/XAML, F#, Integration, Azure,
Troubleshooting & Performance
Management
MVP for Visual Studio & Dev. Tools
www.azurezurichusergroup.com
www.dotnetday.ch
https://www.mymoustache.net/
Manuel Meyer
www.manuelmeyer.net
@manumeyer1
Slide 3
Slide 3 text
Agenda
1. Was ist F#
2. Warum F#
3. Die Geschichte von F#
4. F# Syntax
5. F# Beispiele.
Slide 4
Slide 4 text
Was ist F#?
Slide 5
Slide 5 text
Von C# nach F#
C#
Slide 6
Slide 6 text
Das .NET Framework
Slide 7
Slide 7 text
Von C# nach F#
«Was ist der Unterschied
zwischen F# und C#?»
«Eines beginnt mit F das
andere mit C»
Slide 8
Slide 8 text
Von C# nach F#
OO = Objekte & State & Behavior
Funktional = Datentypen
und Transformationen
Slide 9
Slide 9 text
Warum F#?
4 gute Gründe
Slide 10
Slide 10 text
Warum F#? Grund 1
Concise = Weniger Code
– Deklarativ anstatt imperativ
– Weniger Bugs
– Besser lesbar
– Leichter wartbar
Korrekt
– Deterministisch
– Keine NullReferenceException
Immutable & Gekapselt
– Keine Globalen Abhängigkeiten
– Parallelisierbar/Asynchronisierbar.
Slide 11
Slide 11 text
NullReferenceException
Implemented in ALGOL in 1965 by Tony Hoare
The Billion Dollar Mistake
https://www.infoq.com/presentations/Null-References-The-Billion-
Dollar-Mistake-Tony-Hoare
Slide 12
Slide 12 text
Warum F# Grund 2
«There is an interesting phenomenon happening
at Xamarin. Whenever one of our engineers
starts working with F#, they tend to embrace it
and stay there?»
-- Miguel de Icaza
Xamarin
-> F# is a first class citizen for Xamarin.
Slide 13
Slide 13 text
Warum F# Grund 3
https://jet.com/
Online Shop Startup (15% below Amazon)
Pricing Engine in F#
Two parallel Solutions in F# and C#
F# for everything.
https://www.youtube.com/watch?v=4DJWQP2Uxps
https://tech.jet.com/blog/2015/03-22-on-how-jet-chose/
F#
Ist eine .NET Sprache
Functions
– 1. Gleicher Output für gleicher Input
– 2. Keine Seiteneffekte
Visual Studio / VSCode (Ionide Plugin)
Base Class Libraries
Interactive Development (REPL)
http://www.tryfsharp.org/Create.
Syntax: Konzepte
Immutable Values anstatt Variablen
Eine Funktion transformiert (In & Out)
Jede Funktion gibt etwas zurück
Einrückung anstatt geschweifte Klammern {}
Leerzeichen anstatt Kommas zwischen Parametern
Die Reihenfolge spielt eine Rolle.
Beispiel: Sum of Squares
Spezifikation
1. Eine Methode schreiben, an die man eine Zahl n übergeben kann
2. Die Methode nimmt die ganzen Zahlen von 1 bis n
3. Von jeder Zahl das Quadrat bilden
4. Alle Zahlen zusammen zählen
Slide 37
Slide 37 text
Beispiel: Sum of Squares
Spezifikation
1. Eine Methode schreiben, an die man eine Zahl n übergeben kann
2. Die Methode nimmt die ganzen Zahlen von 1 bis n
3. Von jeder Zahl das Quadrat bilden
4. Alle Zahlen zusammen zählen
Beispiel 2: F# TypeProviders
Intellisense für Daten
Zugriff auf externe Ressourcen
Implementiert für JSON, XML, HTML, CSV, SOAP, SQL, Excel,…
Slide 42
Slide 42 text
Beispiel 2: F# TypeProviders
Slide 43
Slide 43 text
Beispiel 2: F# TypeProviders
DEMO:
1. HtmlProvider
2. Sql Server Provider
Slide 44
Slide 44 text
Beispiel 3: Domain Models
Shopping Cart Spezifikation
States
1. A shopping cart can be Empy, Active or PaidFor
2. When you add an item it becomes Active
3. When you remove the last item from an Active cart it becomes
Empty
4. When you pay for an Active cart, it becomes PaidFor
Rules
1. You can add items only to carts that are Empty or Active
2. You can remove an item only from a cart that is Active
3. You can only pay for carts that are Active.
Source: https://fsharpforfunandprofit.com/posts/designing-for-correctness/
Slide 45
Slide 45 text
Beispiel 3: Domain Models
Shopping Cart Spezifikation
Source: https://fsharpforfunandprofit.com/posts/designing-for-correctness/
Slide 46
Slide 46 text
Zusammenfassung
Warum F#
– Weniger Code, weniger Bugs
– Keine NullReferenceException
– Mehr Kohle
Syntax
– Let & fun
– Pattern Matching
– Type Providers
Weiter mit…
– http://www.tryfsharp.org/.
Slide 47
Slide 47 text
Thinking out of the Box!
-4°
Slide 48
Slide 48 text
Links
Try F#
– http://www.tryfsharp.org/
F# for Fun & Profit
– https://fsharpforfunandprofit.com/
WPF Quickstart in F#
– https://alexatnet.com/quickstart-wpf-f-only-app-in-vscode/
Jet.com
– https://tech.jet.com/blog/2015/03-22-on-how-jet-chose/
F# Foundation
– http://fsharp.org
Slide 49
Slide 49 text
Thank You!
Manuel Meyer ([email protected])
www.manuelmeyer.net
@manumeyer1