Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Von C# nach F# in 60 Minuten

7252086bae9203045dd7f5664fd96a07?s=47 Manuel Meyer
November 29, 2017

Von C# nach F# in 60 Minuten

Seit einigen Jahren wissen wir, dass es im .NET-Universum einen neuen Mitspieler namens F# gibt, mit dem man einiges anstellen kann. Aber was denn genau? Sind wir mal ehrlich, so richtig mit dem Thema befasst haben wir C#-Entwickler uns bisher ja nicht, oder? In dieser Session räumen wir mit den Vorurteilen auf („F# braucht man nur für Mathematikprogramme und in der Finanzindustrie“) und schauen uns die Versprechen von F# genauer an („NullReferenceException gibt’s in F# nicht“). Der Einblick in die Welt der funktionalen Programmierung lohnt sich für alle, versprochen!

7252086bae9203045dd7f5664fd96a07?s=128

Manuel Meyer

November 29, 2017
Tweet

Transcript

  1. 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
  2. Ü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
  3. Agenda 1. Was ist F# 2. Warum F# 3. Die

    Geschichte von F# 4. F# Syntax 5. F# Beispiele.
  4. Was ist F#?

  5. Von C# nach F# C#

  6. Das .NET Framework

  7. Von C# nach F# «Was ist der Unterschied zwischen F#

    und C#?» «Eines beginnt mit F das andere mit C»
  8. Von C# nach F# OO = Objekte & State &

    Behavior Funktional = Datentypen und Transformationen
  9. Warum F#? 4 gute Gründe

  10. 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.
  11. 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
  12. 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.
  13. 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/
  14. https://insights.stackoverflow.com/survey/2017#top-paying-technologies

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

  16. 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#.
  17. FORTRAN

  18. LISP

  19. SIMULA

  20. Brainfuck

  21. C#

  22. F#

  23. Funktionale Programmierung «Das braucht doch keiner!»

  24. Funktionale Programmierung F# (2005) Ocaml (1996) Haskell (1990) Lisp (1958)

    Clojure (2007) Scala (2004) Erlang (1986)
  25. Ericsson AXD301 «9 Nines» 99.9999999%.

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

    ejabberd
  27. 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.
  28. 4 Key Concepts Function-oriented (Good Design) Expressions (isof Statements) Algebraic

    Types (for domain models) Pattern Matching (for flow control) F#
  29. Function Oriented (Good Design)

  30. 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
  31. Pattern Matching (for flow control) Objektorientiert: Funktional: If-Else For/Foreach While/Do

    GoTo.
  32. F# Syntax Let & fun, Pattern Matching

  33. 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.
  34. Syntax: Tools Notepad + fsc.exe FSI (F# Interactive): VS Developer

    Command Prompt -> fsi.exe VSCode + Ionide Plugin Visual Studio.
  35. Syntax: Let

  36. 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
  37. 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
  38. Syntax: Pattern Matching

  39. F# Beispiele WinForms, TypeProviders, Domain Models

  40. Beispiel 1: WinForms

  41. Beispiel 2: F# TypeProviders Intellisense für Daten Zugriff auf externe

    Ressourcen Implementiert für JSON, XML, HTML, CSV, SOAP, SQL, Excel,…
  42. Beispiel 2: F# TypeProviders

  43. Beispiel 2: F# TypeProviders DEMO: 1. HtmlProvider 2. Sql Server

    Provider
  44. 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/
  45. Beispiel 3: Domain Models Shopping Cart Spezifikation Source: https://fsharpforfunandprofit.com/posts/designing-for-correctness/

  46. Zusammenfassung Warum F# – Weniger Code, weniger Bugs – Keine

    NullReferenceException – Mehr Kohle Syntax – Let & fun – Pattern Matching – Type Providers Weiter mit… – http://www.tryfsharp.org/.
  47. Thinking out of the Box! -4°

  48. 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
  49. Thank You! Manuel Meyer (manuel.meyer@trivadis.com) www.manuelmeyer.net @manumeyer1