Slide 1

Slide 1 text

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/

Slide 14

Slide 14 text

https://insights.stackoverflow.com/survey/2017#top-paying-technologies

Slide 15

Slide 15 text

Die Geschichte von F# Prozedural, Funktional, Objektorientiert, Esoterisch

Slide 16

Slide 16 text

Von C# nach F# 1957 FORTRAN -> Prozedural 1958 LISP -> Functional 1970 SIMULA -> Objektorientiert . . 1999 Brainfuck -> Esoterisch (https://soulsphere.org/hacks/bf.net/) 2000 C# 2005 F#.

Slide 17

Slide 17 text

FORTRAN

Slide 18

Slide 18 text

LISP

Slide 19

Slide 19 text

SIMULA

Slide 20

Slide 20 text

Brainfuck

Slide 21

Slide 21 text

C#

Slide 22

Slide 22 text

F#

Slide 23

Slide 23 text

Funktionale Programmierung «Das braucht doch keiner!»

Slide 24

Slide 24 text

Funktionale Programmierung F# (2005) Ocaml (1996) Haskell (1990) Lisp (1958) Clojure (2007) Scala (2004) Erlang (1986)

Slide 25

Slide 25 text

Ericsson AXD301 «9 Nines» 99.9999999%.

Slide 26

Slide 26 text

Erlang Users CouchDB RabbitMQ SimpleDB (AWS) Cowboy, Ranch, Bullet, Sheriff ejabberd

Slide 27

Slide 27 text

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.

Slide 28

Slide 28 text

4 Key Concepts Function-oriented (Good Design) Expressions (isof Statements) Algebraic Types (for domain models) Pattern Matching (for flow control) F#

Slide 29

Slide 29 text

Function Oriented (Good Design)

Slide 30

Slide 30 text

Function Oriented (Good Design) SOLID Principles SRP: Single Responsibility Principle OCP: Open Closed Principle LSP: Liskov Substitution Principle ISP: Interface Segregation Principle DIP: Dependency Inversion Principle Uncle Bob

Slide 31

Slide 31 text

Pattern Matching (for flow control) Objektorientiert: Funktional: If-Else For/Foreach While/Do GoTo.

Slide 32

Slide 32 text

F# Syntax Let & fun, Pattern Matching

Slide 33

Slide 33 text

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.

Slide 34

Slide 34 text

Syntax: Tools Notepad + fsc.exe FSI (F# Interactive): VS Developer Command Prompt -> fsi.exe VSCode + Ionide Plugin Visual Studio.

Slide 35

Slide 35 text

Syntax: Let

Slide 36

Slide 36 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

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

Slide 38

Slide 38 text

Syntax: Pattern Matching

Slide 39

Slide 39 text

F# Beispiele WinForms, TypeProviders, Domain Models

Slide 40

Slide 40 text

Beispiel 1: WinForms

Slide 41

Slide 41 text

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