> For the complete documentation index, see [llms.txt](https://rdeneau.gitbook.io/formation-fsharp-fr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://rdeneau.gitbook.io/formation-fsharp-fr/intro.md).

# Intro

{% hint style="warning" %}
Ce support existe aussi en anglais : [F# Training](https://rdeneau.gitbook.io/fsharp-training/) .\
→ C'est là que vous trouverez les dernières mises-à-jour.
{% endhint %}

## Auteur

Romain DENEAU

* Senior Developer F♯ C♯ TypeScript
* Github [/rdeneau](https://github.com/rdeneau)
* Linked-in [romain-deneau](https://www.linkedin.com/in/romain-deneau-95481143/)
* ~~Twitter/X~~ [~~@DeneauRomain~~](https://x.com/DeneauRomain)

## Pourquoi F♯

[En un tweet](https://nitter.net/MokoSharma/status/1458151277343379457) :

* Succinct
* Robuste
* Performant

En détail :

* Langage multi-paradigme avec une forte orientation fonctionnelle
  * Principes fonctionnels : immutabilité et composition
  * Briques : fonctions et types algébriques
* "Fun" ! Très agréable à écrire et à lire
  * Expressif et concis (syntaxe peu verbeuse)
  * Sensible à l'indentation → facilite la lecture
  * Typage statique fort mais quasi-transparent grâce à l'inférence de type
* Langage entreprise friendly
  * Tourne sur la plateforme .NET → performant, Interop aisée avec projets C#
  * Très bon tooling : VS, VsCode, Rider
  * Code robuste : résultats prédictibles et reproductibles (immuabilité, égalité structurelle, absence de null, vérification exhaustive des cas dans *pattern matching*)
  * Communauté solide, nombreuses librairies *F# friendly*
  * Programmation interactive : vérifier un code en l'évaluant dans la console FSI
* F# par rapport aux autres langages fonctionnels "Back-end"
  * Sa syntaxe n'est pas hybride contrairement à Scala et Kotlin (mixe OOP/FP)
  * Plus facile à apprendre que Haskell ou OCaml *(mais qui ont plus de fonctionnalités FP)*
  * Typage statique contrairement à Closure *(et beaucoup beaucoup moins de parenthèses)*

## Convention

📍 → notion abordée plus tard, généralement avec le lien associé

💥 → erreur de compilation ou une exception au *runtime*&#x20;

🚀 → chapitre d'un niveau + avancé

🍔 ou 🎲 → Quiz

📜 → Récap’

## Public cible

* Développeur C#
* Pour les développeurs non .NET, en voici une [courte introduction](https://carpenoctem.dev/blog/fsharp-for-linux-people/#versions).

## Installation

### SDK .NET <a href="#install-net-sdk" id="install-net-sdk"></a>

Kit de développement logiciel :

* Contient : CLI `dotnet`, librairies et runtime .NET
* Gratuit et multiplateforme

Procédure :&#x20;

* Télécharger et installer le SDK .NET 5.0 : <https://dotnet.microsoft.com/download/dotnet/5.0>
* Vérifier l'installation en ouvrant un terminal et en entrant la commande `dotnet --version`qui renverra par exemple `5.0.302`.

### Visual Studio Code

Éditeur de texte gratuit, open source et multiplateforme

* Télécharger et installer vscode : <https://code.visualstudio.com/#alt-downloads>
* Vérifier l'installation en ouvrant un terminal et en entrant la commande `code .`qui doit ouvrir vscode et parcourir le répertoire courant.
* Installer l'extension [Ionide-fsharp](https://marketplace.visualstudio.com/items?itemName=Ionide.Ionide-fsharp) pour faire de vscode un IDE complet pour F#

### Linux

🔗 [Compléments pour développer du F# sur Linux](https://carpenoctem.dev/blog/fsharp-for-linux-people/)

## Changelog

### 2025-04-02

* F# 8.0 et F# 9.0

### 2024-01-24

* Mention de [Fonctions : compléments](/formation-fsharp-fr/fonctions/fonctions-complements.md#lazy-active-pattern)
* Astuce pour instancier un `Nullable` (cf. [Type Option](/formation-fsharp-fr/types-monadiques/type-option.md#option-vs-nullable))
* Mention de `ResizeArray` (cf. [Vue d'ensemble](/formation-fsharp-fr/collections/vue-densemble.md))
* Mention de `readOnlyDict` et `KeyValue` (cf. [Types](/formation-fsharp-fr/collections/types.md#dictionnaires))
* Mention du mot clé `global` pour les imports (cf. [Vue d'ensemble](/formation-fsharp-fr/module-and-namespace/vue-densemble.md#import-shadowing))
* Précisions sur les attributs `AutoOpen` et `RequireQualifiedAccess`\
  *(cf.* [Module](/formation-fsharp-fr/module-and-namespace/module.md#annotation-dun-module)*)*
* Précisions et exemples pour choisir entre méthodes et fonctions \
  *(cf.* [Membres](/formation-fsharp-fr/oriente-objet/membres.md#methode-vs-fonction)*)*
* Précisions sur le gain en lisibilité quand on utilise des actives patterns\
  *(cf.* [🚀 Active Patterns](/formation-fsharp-fr/pattern-matching/active-patterns.md#active-pattern-partiel)*)*

### 2022-11-10

* F♯ 7.0 : RFC [FS-1083](https://github.com/fsharp/fslang-design/blob/main/FSharp-7.0/FS-1083-srtp-type-no-whitespace.md) ([Génériques](/formation-fsharp-fr/types-complements/generiques.md#srtp)),[ ](https://github.com/fsharp/fslang-design/blob/main/FSharp-7.0/FS-1083-srtp-type-no-whitespace.md)[FS-1123 ](https://github.com/fsharp/fslang-design/blob/main/FSharp-7.0/FS-1123-result-module-parity-with-option.md)([Type Result](/formation-fsharp-fr/types-monadiques/type-result.md#module-result)), [FS-1126](https://github.com/fsharp/fslang-design/blob/main/FSharp-7.0/FS-1126-allow-lower-case-du-cases%20when-require-qualified-access-is%20specified.md) ([Unions](/formation-fsharp-fr/types-composites/unions.md#casse-des-tags))
