From 73b03baed6afd38285314d2fb7690c381f00ed88 Mon Sep 17 00:00:00 2001 From: Grizouille Date: Mon, 15 Dec 2025 17:21:02 +0100 Subject: [PATCH] wip --- Correction/ReadMe.md | 4 +- modernStyleC8-12.md | 220 +++++++++++++++++++++++++++++++++++++++++++ readme.md | 4 +- 3 files changed, 224 insertions(+), 4 deletions(-) create mode 100644 modernStyleC8-12.md diff --git a/Correction/ReadMe.md b/Correction/ReadMe.md index bea594b..8b722b5 100644 --- a/Correction/ReadMe.md +++ b/Correction/ReadMe.md @@ -261,9 +261,7 @@ Même à l’échelle d’un mini-jeu console, cette architecture permet : * une application concrète des principes **SOLID** * une implémentation claire de l’**architecture hexagonale** -> *Ps:*
-> On a donc utilisé un canon pour écraser une mouche, mais au moins, on sait comment fonctionne le canon!
-> Et oui, c'est excessif pour un jeu en console. Non, on ne regrette rien. L'apprentissage n'a pas de prix (mais a beaucoup de classes). +> *Ps:* On a donc utilisé un canon pour écraser une mouche, mais au moins,
on sait comment fonctionne le canon ! --- diff --git a/modernStyleC8-12.md b/modernStyleC8-12.md new file mode 100644 index 0000000..24ea2dd --- /dev/null +++ b/modernStyleC8-12.md @@ -0,0 +1,220 @@ +Bien sûr 🙂 +Voici une **petite liste d’exemples de styles modernes en C# (C# 8 → C# 12)**, avec des cas courants : conditions, parcours de tableaux, création d’objets, etc. + +--- + +## 🔹 1. Opérateur ternaire (version concise) + +```csharp +string status = string.Empty; +If(age >= 18) +{ + statut = "Majeur" +} +else +{ + statut = "Mineur" +} + +// ou +var statut = age >= 18 ? "Majeur" : "Mineur"; +``` + +Avec expression conditionnelle imbriquée : + +```csharp +var note = score switch +{ + >= 16 => "Très bien", + >= 12 => "Bien", + >= 10 => "Passable", + _ => "Insuffisant" +}; +``` + +--- + +## 🔹 2. `switch` expression (moderne) + +```csharp +string message = codeErreur switch +{ + 404 => "Introuvable", + 401 => "Non autorisé", + 500 => "Erreur serveur", + _ => "Erreur inconnue" +}; +``` + +--- + +## 🔹 3. Parcourir un tableau / liste + +### `foreach` (simple et propre) + +```csharp +foreach (var item in items) +{ + Console.WriteLine(item); +} +``` + +### LINQ (fonctionnel) + +```csharp +items + .Where(i => i.IsActive) + .Select(i => i.Name) + .ToList() + .ForEach(Console.WriteLine); +``` + +--- + +## 🔹 4. Création d’objet (init rapide) + +### Initialiseur d’objet + +```csharp +var user = new User +{ + Id = 1, + Name = "Alice", + IsAdmin = true +}; +``` + +### Constructeur concis (target-typed `new`) + +```csharp +User user = new(1, "Alice", true); +``` + +--- + +## 🔹 5. `record` (objets immuables – très moderne) + +```csharp +public record User(int Id, string Name, bool IsAdmin); +``` + +Utilisation : + +```csharp +// User(int id, string name, bool isAdmin) +var user = new User(1, "Alice", false); +// Retourn false. +var admin = user with { IsAdmin = true }; +``` + +--- + +## 🔹 6. Null safety (très utilisé) + +### Opérateur `?.` + +```csharp +// Si user == null alors on n'accède pas à Name +// Si Name == null alors on n'accède pas à Length +var length = user?.Name?.Length; +``` + +### Coalescence `??` + +```csharp +// Si user.Name == null alors on assigne "Inconnu" +string name = user.Name ?? "Inconnu"; +``` + +### Affectation conditionnelle `??=` + +```csharp +// Si null alors on assigne. +user.Name ??= "Par défaut"; +``` + +--- + +## 🔹 7. Expressions lambda + +```csharp +Func carre = x => x * x; +Console.WriteLine(carre(5)); +``` + +--- + +## 🔹 8. Pattern matching + +```csharp +if (obj is User { IsAdmin: true }) +{ + Console.WriteLine("Admin détecté"); +} +``` + +--- + +## 🔹 9. Tableaux et collections modernes + +### Création simplifiée (C# 9+) + +```csharp +int[] nombres = { 1, 2, 3, 4 }; +``` + +### Range & Index + +```csharp +int[] nombres = { 1, 2, 3, 4, 5 }; + +// INDEX (^) – à partir de la fin +var ... = nombres[^1]; // dernier élément → 5 +var ... = nombres[^2]; // avant-dernier → 4 +var ... = nombres[^3]; // retourne 3 + +// RANGE (..) – sous-tableaux +var ... = nombres[1..4]; // {2, 3, 4} +// Un seul élément via Range +var ... = nombres[2..3]; // {3} +// Début → Fin du tableau +var ... = nombres[2..]; // {3, 4, 5} +// Début du tableau → Fin +var ... = nombres[..3]; // {1, 2, 3} +// Début → Fin (exclus) +var sousTableau = nombres[1..4]; // {2, 3, 4} +// Tout le tableau +var ... = nombres[..]; // {1, 2, 3, 4, 5} +// Range avec Index depuis la fin +var ... = nombres[1..^1]; // {2, 3, 4} +// Derniers éléments +var ... = nombres[^2..]; // {4, 5} +// Tout sauf les deux derniers +var ... = nombres[..^2]; // {1, 2, 3} +``` + +--- + +## 🔹 10. Méthodes d’expression (très clean) + +```csharp +int Add(int a, int b) => a + b; +``` + +--- + +## 🔹 11. `using` moderne (sans bloc) + +```csharp +using var file = new StreamWriter("test.txt"); +file.WriteLine("Hello"); +``` + +--- + +## 🔹 12. Collections immuables rapides + +```csharp +// Création d'un tableau de string +var fruits = new[] { "Pomme", "Banane", "Orange" }; +``` diff --git a/readme.md b/readme.md index 9874999..2fcd2ec 100644 --- a/readme.md +++ b/readme.md @@ -158,4 +158,6 @@ private int Write(int value){ return value + 1; } -``` \ No newline at end of file +``` + +Pour aller plus loins: [ici](./modernStyleC8-12.md) \ No newline at end of file