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

Von C# nach F# in 60 Minuten

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!

Manuel Meyer

November 29, 2017
Tweet

More Decks by Manuel Meyer

Other Decks in Programming

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. Von C# nach F# «Was ist der Unterschied zwischen F#

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

    Behavior Funktional = Datentypen und Transformationen
  6. 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.
  7. 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
  8. 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.
  9. 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/
  10. 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#.
  11. C#

  12. F#

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

    Types (for domain models) Pattern Matching (for flow control) F#
  15. 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
  16. 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.
  17. Syntax: Tools Notepad + fsc.exe FSI (F# Interactive): VS Developer

    Command Prompt -> fsi.exe VSCode + Ionide Plugin Visual Studio.
  18. 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
  19. 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
  20. Beispiel 2: F# TypeProviders Intellisense für Daten Zugriff auf externe

    Ressourcen Implementiert für JSON, XML, HTML, CSV, SOAP, SQL, Excel,…
  21. 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/
  22. Zusammenfassung Warum F# – Weniger Code, weniger Bugs – Keine

    NullReferenceException – Mehr Kohle Syntax – Let & fun – Pattern Matching – Type Providers Weiter mit… – http://www.tryfsharp.org/.
  23. 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