Functional Programming in F# für .NET – Kursinhalte

Die Kurs Inhalte können variieren, je nach Wissensstand, Zeitrahmen und Trainingsschwerpunkten.
Es wird Wert gelegt auf die Grundlagen und dass man das Gelernte sofort anwenden kann.

Sofort Produktiv

  • einfache und mächtige F# Syntax, wenig Code, einfaches Refactoring
  • Code ausführen während man ihn schreibt
  • effiziente und gut verständliche Datenmodellierung (Domain Driven Design (DDD)) mit Algebraischen Daten Typen die automatisch Strukturellen Vergleich und Hashing bieten.
  • Masseinheiten werden vom Compiler bei Übergabe und Berechnungen auf Korrektheit geprüft (Meter, Kilogramm, Sekunde, Pixel, Dollar, SelbstDefiniert, etc.)
  • mit F# Type Providern Ihre Daten automatisch typisiert im Code mit IntelliSense anwenden. Type Provider sind ein einzigartiges Feature von F# (seit 2010, ich konnte es kaum glauben als ich es das erste mal 2010 gesehen habe, It’s magic!), das keine andere Programmiersprache bisher ermöglicht (mit Ausnahme von IDRIS seit März 2015).
  • Erstellen von eigenen Domain Specific Languages (DSL)
  • F# ist in Visual Studio (seit 2010) schon enthalten
  • Kompatibilität, .dll’s können von C#, VB.NET und umgekehrt verwendet werden.

Wichtige Grundlagen der Funktionalen Programmierung (FP)

  • Immutability: verstehen warum Immutability gut ist und hilft Probleme einfacher zu lösen und Code besser zu verstehen. Immutable Daten Strukturen
  • Type Inference : verstehen und Nutzen erkennen
  • Partial Application und Curring
  • Rekursion: rekursive Funktionen und rekursive Datentypen
  • Higher Order Functions : map, reduce, filter, etc.
  • Pattern Matching
  • Referential Transparency
  • Lazyness: Seq, lazy
  • Memoziation
  • Algebraische Daten Typen (ADT) (sind keine POCOs (Plain-Old CLR Objects))

Wesentliche Unterschiede von F# zu C#

  • null als ungültiger Wert (nicht als gültiger default Wert von Referenz Typen in C#)
  • unit als leerer Wert (nicht void als kein Wert wie in C#, denn void und async vertragen sich nicht gut in C#)
  • async als Library (nicht als async und await Sprachkonstrukte wie in C#)
  • lock als Funktion (nicht als Statement wie in C#)
  • choice für Exception Handling (Exception free programming)

Automatisiertes Testen

  • interaktives Testen im REPL
  • automatisches Erzeugen von Testdaten und Ermittlung des kleinsten Datensatzes, der die Fehler-Analyse vereinfacht mit FsCheck
  • Testen von Webseiten mit Canopy (Automatisiertes Surfen)

Parallel Programming und Asynchronous Programming (Concurrent Programming)

  • Parallelen Code schreiben, dem man trauen kann (immer richtiges Ergebnis)
  • Async Code composition
  • Actors (F# MailboxProcessor)

Web Programmierung (wird im Grundkurs nur gestreift)

  • F# Code zu JavaScript compilieren (mit FunScript oder WebSharper)
  • Client- und Server-Code in F# schreiben (Code Reuse) und automatisch zu .NET für Server und JavaScript für Client compilieren (mit WebSharper)
  • IntelliSense in F# für JavaScript Library Funktionen dank automatischer TypeScript Definitions File Auswertung.

Zu F# Inhouse Schulungskurse